INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
(610, '_transient_timeout_feed_mod_9bbd59226dc36b9b26cd43f15694c5c3', '1748891447', 'off'),
(611, '_transient_feed_mod_9bbd59226dc36b9b26cd43f15694c5c3', '1748848247', 'off'),
(612, '_transient_timeout_feed_d117b5738fbd35bd8c0391cda1f2b5d9', '1748891450', 'off');
INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
(613, '_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:75:\"Tammie Lister: Optimising Triage and Review Processes in WordPress Using 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:34:\"https://binatethoughts.com/?p=1826\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:88:\"https://binatethoughts.com/optimising-triage-and-review-processes-in-wordpress-using-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:7538:\"<p>Integrating advancements into open source processes makes sense. The friction often comes in the how and the usefulness. While AI holds immense potential for revolutionising triage and review processes, it&#8217;s crucial to acknowledge its current limitations and look to where it can evolve, learn, and grow to its full capacity. This post aims to explore this potential, offering a realistic perspective. It&#8217;s not a post that claims to solve everything; instead, it will show how we can get started and regain some hours to focus on other needed areas of the project.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"\" class=\"wp-image-1827\" height=\"1024\" src=\"https://binatethoughts.com/wp-content/uploads/2025/06/openart-38ad7cab-43e0-4eed-be32-4d7835b68423.png\" width=\"1024\" /></figure>\n\n\n\n<p>Before we delve into this topic, it&#8217;s important to note that while AI can achieve a great deal, it also has its limitations. This post will focus on high-level inferences rather than direct proposals, starting with small steps. I don&#8217;t have all the answers, but together, we can find them. My perspective is informed by extensive theme reviews and ongoing triage work, so I won&#8217;t cover areas where I lack knowledge.</p>\n\n\n\n<h2 class=\"wp-block-heading\">What can it do today</h2>\n\n\n\n<p>In simple terms, the things we likely shouldn&#8217;t be doing manually include reviews, first-pass triage, testing and routine checks. Historically, there have been areas where we have been slowly adding more processes over time before the term AI was widely used. That&#8217;s one of the key things: often, having a robust process, a path trodden and documented, means the parsing is simple to learn, and therefore you can hand it over more easily.</p>\n\n\n\n<p>Triage is already being done incredibly effectively in areas like healthcare. There it is improving accuracy and saving lives, as noted in an article by Reuters:</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;Our study provides the first multinational evidence that artificial intelligence can help enhance accuracy&#8221; in determining HER2 clinical categories, &#8220;potentially closing critical diagnostic gaps and enabling more patients to have access to new therapies, said Dr. Marina De Brot of the A.C. Camargo Cancer Center in Sao Paulo, Brazil, who led the study.<br />&#8220;Until recently, most of these patients would have not been offered these options,&#8221; she said.&#8221;<br /><a href=\"https://www.reuters.com/business/healthcare-pharmaceuticals/health-rounds-amgen-blood-platelet-booster-helps-patients-who-need-chemotherapy-2025-05-30/?utm_source=chatgpt.com\">Link</a>: Reuters</p>\n</blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">A triage first-pass</h2>\n\n\n\n<p>The first area is improving first-pass triages. What do I mean by this? In simple terms, doing a lot of the manual work like duplicate label removal, closing after a specific time, checking for details and even duplicate issue detection. Pattern-matching tasks are where these systems excel, and a lot of this is simply a matter of pointing to our learnings during triage and matching them accordingly.</p>\n\n\n\n<p>This is basic; it&#8217;s not AI as much as it&#8217;s processing. It&#8217;s one step above issue templates. The following piece is where it gets interesting: the model for triage needs to learn comprehension of the issue contents. We need to add features like dashboards to the flow because the first stage could be a catch-all that, over time, allows it to triage more to a buffer dashboard, recommending specific states. </p>\n\n\n\n<p>All of these approaches are an excellent way of training, as it provides the model with some freedom to make mistakes, be corrected, learn from them, and refine its patterns. We also collectively don&#8217;t have to worry about labels being added and things closed. Whilst those of us doing triage, get to benefit early on and help train.</p>\n\n\n\n<h2 class=\"wp-block-heading\">The impact of triage processing</h2>\n\n\n\n<p>As far as triage goes, we will be far from achieving full automation of this for quite some time. My instinct is that this is more of a help in clearing a percentage and making it easier for those working on issues. It can do that in significant numbers, to the extent that over 50% of the time spent in triage could be recovered I&#8217;d suggest sooner over later. I do see this going up over time, but how much depends on the quality of the modelling and our trust as a project.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Theme review first-pass</h2>\n\n\n\n<p>Just as triage, I suggest adopting a similar model for theme reviews. In this case, too, if we are honest, reviewing what we do and don&#8217;t want in reviews would be beneficial. I will be bold here, but nearly 100% of theme reviewing could be done through a process without manual interaction fairly soon.</p>\n\n\n\n<p>How do we get there? We achieve this through a balance of reviewing the theme review guidelines and, similarly, triage training. These reviews are very formulaic and matching. This is what models thrive on. Suppose we gain trust in this approach and implement the process. In that case, we can then focus all our effort on manual reviewing in various areas, including raising the quality of the core product, documentation, education, and our theme offerings as a project.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Testing</h2>\n\n\n\n<p>We have, over the years, even before the recent AI tech wave, been leaning into less manual testing. Issues and tickets needed less manual testing. We require testing for regression across all areas in our project. That&#8217;s not AI, but we can take it even further, adopting a more updated approach to our testing.</p>\n\n\n\n<p>The reality of the world today is that you can share a screenshot with code editors and get an application mocked up that looks like that. We also need to evolve our systems to test for differences and minimise the need for multiple humans to be involved in each ticket.</p>\n\n\n\n<h2 class=\"wp-block-heading\">What will we do if it does this?</h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"\" class=\"wp-image-1829\" height=\"1024\" src=\"https://binatethoughts.com/wp-content/uploads/2025/06/openart-48c1cda1-444d-40e3-89b1-5d046bc4143f.png\" width=\"1024\" /></figure>\n\n\n\n<p>I share these perspectives as someone who performs triage and frequently engages in this manual work. Some may be sceptical or wonder how their sponsored time will be allocated. The point is that there is a great deal that needs to be done in this project. These systems to implement today&#8217;s technology need people. The models require training by experts. Then they need to be nurtured and grown by those same people. There will always be a need for contributors.</p>\n\n\n\n<p>At this time, with our capabilities in automation and AI in a world of agentic flows, we can do better than relying solely on manual processes. We must do so in order not to be left behind. It is also not resourceful to use humans this way. We can use our scarce human resources more sensibly. Our time is finite, and this project requires us to accomplish many tasks. There will be a balance between what we automate and utilise as resources and what we provide to a system. That, though, is something we need to start working out, and we do that by realising we need to find a balance in how we do things and measure the costs of our processes today and in the future.</p>\";s: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, 01 Jun 2025 12:42: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:18:\"binatethoughts.com\";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:103:\"Do The Woo Community: Building Reliable WooCommerce Sites: Insights into Hosting, Scaling, and Workflow\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=97002\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:99:\"https://dothewoo.io/building-reliable-woocommerce-sites-insights-into-hosting-scaling-and-workflow/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:222:\"Shared strategies to ensure reliable WooCommerce performance during traffic spikes, emphasizing standardized processes, trusted hosting partnerships, and automated testing to foster client trust and ease agency operations.\";s: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, 29 May 2025 12:38: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:8:\"Bob Dunn\";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:126:\"Do The Woo Community: Launching Upload Worthy: Video Strategy, Brand Awareness, and Conversions for WordPress Product Creators\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=97496\";s:7:\"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://dothewoo.io/launching-upload-worthy-video-strategy-brand-awareness-and-conversions-for-wordpress-product-creators/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:229:\"The inaugural episode of \"Upload Worthy\" explores video marketing strategies with hosts Christian Taylor and Adam Weeks. They discuss timing for video investment, brand awareness versus conversions, and measuring content success.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 29 May 2025 09:57: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:8:\"Bob Dunn\";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:85:\"WordPress Foundation: Thank You, Automattic: Announcing the Open Horizons Scholarship\";s:7:\"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=1201015\";s:7:\"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:104:\"https://wordpressfoundation.org/news/2025/thank-you-automattic-announcing-the-open-horizons-scholarship/\";s: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:1467:\"<p>We’re thrilled to announce the Open Horizons Scholarship, a new initiative to help contributors from underrepresented regions attend flagship WordCamp events, made possible through a generous $30,000 donation from Automattic to the WordPress Foundation.</p>\n\n\n\n<p>Thank you, Automattic, for funding this important work. Your support expands opportunities for contributors around the world to participate in person, starting with WordCamp US 2025.</p>\n\n\n\n<p>The scholarship will be managed by the WordPress Foundation, which will oversee the application and selection process and ensure that funds are distributed equitably. This new program joins the Kim Parsell Memorial Scholarship and the Diversity Scholarship by WordPress Community Support, reinforcing a shared commitment to a more inclusive and globally representative WordPress community.</p>\n\n\n\n<p>If your company believes in a more diverse, open, and accessible web, we invite you to join us. Support a scholarship. Sponsor a contributor. Help build the future of WordPress, together</p>\n\n\n\n<p><strong>Interested in applying?<br /></strong><a href=\"https://automattic.survey.fm/open-horizons-scholarship\">Apply for the Open Horizons Scholarship</a> and take your next step toward joining the flagship WordCamp experience. To learn more, you can read <a href=\"https://automattic.com/2025/05/28/automattic-open-horizons-scholarship/\">Automattic’s full announcement</a> about the program.</p>\n\n\n\n<p></p>\";s: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, 28 May 2025 19:28: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:12:\"Isotta Peira\";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:95:\"WPTavern: #171 – Felix Arntz on How Speculative Loading Is Speeding Up Your WordPress 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:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=196101\";s:7:\"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:109:\"https://wptavern.com/podcast/171-felix-arntz-on-how-speculative-loading-is-speeding-up-your-wordpress-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:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:60964:\"<details>Transcript<div>\n<p>[00:00:19] <strong>Nathan Wrigley:</strong> Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.</p>\n\n\n\n<p>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 speculative loading is speeding up your WordPress website.</p>\n\n\n\n<p>If you&#8217;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.</p>\n\n\n\n<p>If you have a topic that you&#8217;d like us to feature on the podcast, I&#8217;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.</p>\n\n\n\n<p>So on the podcast today we have Felix Arntz. Felix is a Senior Software Engineer at Google, and a WordPress Core contributor from Germany, currently residing in San Francisco, California. He helped establish the WordPress Core performance team, and has been heavily contributing to its efforts. He has been using WordPress for a decade and contributing back to the project since 2015. More recently, he has stepped into the role of the inaugural performance lead for the WordPress 6.2 release, and subsequently of the 6.3 and 6.8 releases. In the latter release, he spearheaded development, and launch, of the new speculative loading feature, which is the focus of the podcast today.</p>\n\n\n\n<p>Speculative loading is one of the most important, and yet, almost invisible performance enhancements of recent times. If you&#8217;re on WordPress 6.8, this new feature is already active on your site, working quietly in the background to make page navigation faster, but you might never know from the WordPress UI. There&#8217;s no menu, no toggle, and no obvious indicator to show it&#8217;s there.</p>\n\n\n\n<p>Felix explains exactly what speculative loading is and why it feels almost like browser magic. The Ability for WordPress, using the browser&#8217;s new Speculation Rules API to load the next page just as the user is about to visit it. It&#8217;s a clever use of browser signals like mouse clicks, and hovers, to anticipate navigation, shaving off precious milliseconds, sometimes even providing what feels like an instant page load.</p>\n\n\n\n<p>Felix clarifies the difference between conservative and more aggressive approaches to speculative loading. And why the WordPress core team opted for the safest, least wasteful, option by default, while still giving developers or advanced users the hooks and tools to customize, or even disable it, as needed.</p>\n\n\n\n<p>Felix discusses the origins of the feature as a plugin, the testing and data collection undertaking with tens of thousands of sites, and how this real world data gave the team confidence to ship speculative loading to all WordPress users. We talk about what those performance wins mean at scale, how a 2% improvement on 43% of the internet translates into saving users untold hours of waiting collectively.</p>\n\n\n\n<p>We also get into the weeds on measurement and methodology, how the team uses data from the Chrome user Experience Report and HTTP Archive to track web performance, prioritize features, and validate real world impact. Felix offers insights into how these global, anonymized data, sets allow the performance team to make truly data-driven decisions.</p>\n\n\n\n<p>Beyond the tech, Felix addresses practical considerations such as how to opt out or fine tune speculative loading if you have specific needs. How environmental concerns are balanced by default configurations. And how plugins or agencies might build on this foundation in the future.</p>\n\n\n\n<p>If you&#8217;ve ever wondered how large scale browser level improvements make their way into WordPress Core, or simply want to know if there&#8217;s a way to make your own WordPress site that much faster, this episode is for you.</p>\n\n\n\n<p>If you&#8217;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&#8217;ll find all the other episodes as well.</p>\n\n\n\n<p>And so without further delay, I bring you Felix Arntz. I am joined on the podcast by Felix Arntz. Hello, Felix.</p>\n\n\n\n<p>[00:04:46] <strong>Felix Arntz:</strong> Hey. Happy to be here.</p>\n\n\n\n<p>[00:04:47] <strong>Nathan Wrigley:</strong> Yeah, thank you. I appreciate you joining us. Felix is joining us all the way from California. I&#8217;m in the UK so there&#8217;s a big time gap. And I appreciate you getting up early and talking to me. That&#8217;s fantastic.</p>\n\n\n\n<p>Felix is going to be talking to us today about something which is now in WordPress, and you may not even know that it&#8217;s in there because there&#8217;s nothing to see here. But the endeavor of what Felix has built is to make all WordPress websites basically immediately better. More performant, so that the end users of your websites will be able to access your content more quickly.</p>\n\n\n\n<p>It is something that&#8217;s really fascinating. But before we begin digging into all that, I know it&#8217;s a dreadfully banal question, Felix, but would you just tell us who you are so that people understand your credentials in the WordPress space?</p>\n\n\n\n<p>[00:05:32] <strong>Felix Arntz:</strong> Sure. Thank you. I have been contributing to WordPress now for 10 years. So I started as a freelancer building websites using WordPress, and eventually got into contributing to WordPress Core after I went to my first WordCamp, which was a great way to get started.</p>\n\n\n\n<p>Yeah, ever since then I&#8217;ve been contributing to WordPress Core, and eventually became a Core Committer. And now, for over six years, I&#8217;ve been working at Google, the team where we focus on CMS projects for the most part. So I&#8217;ve been, especially in the last good three years or so, I&#8217;ve been sponsored by Google to contribute to WordPress with a specific focus on improving performance.</p>\n\n\n\n<p>So our team essentially co-founded the WordPress performance team, which is an official part of the wordpress.org project. And ever since that was founded in late 2021, we&#8217;ve been contributing to that effort, and the speculative loading feature is a big part of that.</p>\n\n\n\n<p>[00:06:25] <strong>Nathan Wrigley:</strong> That&#8217;s what we&#8217;re going to talk about today. Can I just rewind a little bit though, and talk about Google for a minute. So, are you employed by Google to commit to WordPress Core? Do you spend a hundred percent of your time working on WordPressy things, or do you have a proportion of your time which is devoted to more, and I&#8217;m doing air quotes, Google things?</p>\n\n\n\n<p>[00:06:46] <strong>Felix Arntz:</strong> Yeah, I mean, I wouldn&#8217;t say that I contribute a hundred percent of my time, but a good chunk, probably 70, 80 or something. Our focus is, when it&#8217;s not on WordPress, it&#8217;s still on other somewhat related open source projects. So we have been contributing, we&#8217;ve been also working with other CMSs here and there.</p>\n\n\n\n<p>[00:07:02] <strong>Nathan Wrigley:</strong> Yeah, that&#8217;s interesting because I know that Google have a big presence. If you go to the flagship WordPress events, you know, WordCamp Asia, WordCamp US, and so on, then Google very often have a huge advertising booth. You know, they&#8217;re a global partner if you like.</p>\n\n\n\n<p>But drawing the line between Google and Open Source CMS is a little bit hard to do. It&#8217;s almost like a philanthropic thing. Because I guess their job is to just try and make the internet better and part of it, if they can make 43% of the internet better by seconding somebody like you to commit to the project, that&#8217;s just good for everybody.</p>\n\n\n\n<p>So yeah, bravo to Google. I appreciate the fact that they&#8217;re sponsoring you and helping the project in that way.</p>\n\n\n\n<p>Also bravo to you and the team, the Performance Team. It is just a relentless good news story coming out of the Performance Team. So, I don&#8217;t know, when did you say, 2019 it was founded?</p>\n\n\n\n<p>[00:07:54] <strong>Felix Arntz:</strong> Late 2021, but things really kicked off like mid 2022 I feel.</p>\n\n\n\n<p>[00:07:58] <strong>Nathan Wrigley:</strong> Yeah, and I am habitual about the WordPress news, and it just never stops. The Performance Team do something profound, help everybody out, it just ships into Core. Most people don&#8217;t even know that things have happened because, you know, they&#8217;re not in the baseball in the same way that you and I probably are.</p>\n\n\n\n<p>A profound thanks. Maybe there was just this massive backlog of things that needed to be tackled. Maybe not. But it did seem that the minute the doors opened to the Performance Team, lots of dominoes fell really quickly.</p>\n\n\n\n<p>So thank you on behalf of me and everybody who uses WordPress for the work that, I don&#8217;t know whether you feel that you get the credit that&#8217;s due to you, but I&#8217;m giving you some credit now, so thank you.</p>\n\n\n\n<p>[00:08:37] <strong>Felix Arntz:</strong> Thank you. I appreciate it. That&#8217;s definitely great to hear.</p>\n\n\n\n<p>[00:08:39] <strong>Nathan Wrigley:</strong> I&#8217;m pleased you know, that there&#8217;s people as capable as you who are doing this kind of work and that you&#8217;re willing to do it in the background. And a big piece of that is what we&#8217;re going to talk about today.</p>\n\n\n\n<p>Landed in WordPress 6.8, but has a history prior to that as a plugin. It&#8217;s called speculative loading. It sounds impressive. But it also, I guess it is impressive and it&#8217;s a bit like voodoo. It&#8217;s kind of doing things that you wouldn&#8217;t imagine were possible. Do you want to just tell us what it is? What is speculative loading?</p>\n\n\n\n<p>[00:09:08] <strong>Felix Arntz:</strong> So essentially, speculative loading, the idea is that when you navigate to a new URL, when you are browsing through a website and you go to a URL, the moment that you land on the URL, it starts loading. And we probably know that the performance aspect of that is very important to the user experience.</p>\n\n\n\n<p>So if a page takes, I don&#8217;t know, three seconds to load, that&#8217;s not great. If it takes eight seconds to load, it&#8217;s probably horrible of a user experience. And so one of the performance team&#8217;s goals is to make that time that it takes a load shorter. So what then speculative loading does is load the URL, the idea is that it loads the URL before you even get there.</p>\n\n\n\n<p>[00:09:47] <strong>Nathan Wrigley:</strong> Yeah, that&#8217;s the bit that&#8217;s voodoo. That&#8217;s the bit that just sounds like you&#8217;ve basically hopped into Back to the Future and you&#8217;ve gone back in time a moment or something. It&#8217;s very counterintuitive. So you are going to have to explain, how on earth does it do that?</p>\n\n\n\n<p>[00:09:59] <strong>Felix Arntz:</strong> Right, right. Essentially, there are browser, there are heuristics which can be relied upon to hopefully assume correctly that a URL will be visited. So when you are on a page on the website, there is of course links to other pages on the website. So if you hover over the link with your mouse, if you&#8217;re on a computer for instance, and you hover over the link with your mouse, maybe you&#8217;ll click it. That&#8217;s like one level of signal. It&#8217;s not the strongest signal.</p>\n\n\n\n<p>But then an even stronger signal is when you actually click the link. When you click a link, you want to go to that URL. I think that&#8217;s a fair assumption in like 99 plus percent of cases. So when you click on the link, that&#8217;s technically still before you&#8217;re at the other URL though. We&#8217;re talking about milliseconds. You probably think when you click, you are already on the other URL, but that&#8217;s not the reality. There is like maybe, I don&#8217;t know, 200, 300, 500, however long it takes, there are some milliseconds in between the time you actually click and that the other URL opens.</p>\n\n\n\n<p>So by loading, for instance, by loading a URL, when you click on the link, you still gain those, whatever, maybe 500 milliseconds. I&#8217;m just going to make that up now, and reduce the actual load time by that.</p>\n\n\n\n<p>[00:11:07] <strong>Nathan Wrigley:</strong> Let me just prize that apart. So we are now going to talk about a tiny fraction of time. For the next few minutes, we&#8217;re going to be talking about literal milliseconds. So let me imagine that I&#8217;m on my computer, desktop computer, let&#8217;s start there. I&#8217;m on a webpage and there&#8217;s a bunch of links, buttons, what have you.</p>\n\n\n\n<p>I&#8217;m holding my mouse, my mouse approaches the button and it begins to slow down, you know, because at some point we have to rest on the button. So there&#8217;s this deceleration of the mouse and the cursor, and it eventually lands there. And then I click it.</p>\n\n\n\n<p>Now my intuition is that the click event is the moment, that&#8217;s when everything begins, if you know what I mean. But are you saying that you can go back in time prior to me actually hitting the button with my finger? Is it the mere fact that, okay, the mouse has come to a standstill, you haven&#8217;t engaged the finger yet. Maybe the finger is literally on the way down in the real world, in this slow motion universe we&#8217;re imagining. Is that kind of it? It&#8217;s taking heuristics about, where is the mouse now? How is it decelerating? Or is it literally he clicked? Because if it&#8217;s the click bit, then I don&#8217;t understand what&#8217;s different to how it usually was because it felt like the click was always the moment.</p>\n\n\n\n<p>[00:12:19] <strong>Felix Arntz:</strong> There are different ways to configure speculative loading. And one way, and that&#8217;s the way that WordPress Core does now, is to only speculatively load on the click. You say now that that feels like it&#8217;s always been like that, but it&#8217;s not quite always been like, that because of what I tried to mention with there&#8217;s still like 500, maybe 300, whatever, little milliseconds time between the click and the actual URL loading.</p>\n\n\n\n<p>So when you hit the other URL, then it starts fetching the HTML document and all the CSS and JavaScript and so on. By doing that already on the click, on the link, on the previous page that you are on, you still gain those, I&#8217;m going to say valuable milliseconds. And we&#8217;re probably talking about at the very least, a hundred milliseconds, maybe a few hundred milliseconds.</p>\n\n\n\n<p>[00:13:04] <strong>Nathan Wrigley:</strong> It doesn&#8217;t sound like a lot, but it&#8217;s, you&#8217;ve invented time out of nowhere. You&#8217;ve completely conjured up time that didn&#8217;t, well, actually you&#8217;ve removed time. You&#8217;ve gone in the opposite direction. But that time was needlessly spent before. Now that time has been saved.</p>\n\n\n\n<p>You also mentioned that the WordPress implementation, and we&#8217;ll get into how you might be able to configure that in a moment, but the default WordPress installation, so this is in every WordPress website from 6.8 onwards, it is set to, and I&#8217;m going to use the word conservative, but it&#8217;s set to a fairly dialed back approach to this Speculation Rules API.</p>\n\n\n\n<p>I&#8217;m curious, and we&#8217;ll get into how you do it in WordPress, but just in terms of the Speculation Rules API, what are some of the more aggressive things that you could do if you wanted to? And is things like the mouse slowing down, is that potentially part of it? Those kind of things.</p>\n\n\n\n<p>[00:13:55] <strong>Felix Arntz:</strong> Right. So maybe let me take a step back, first to clarify that there&#8217;s a speculative loading feature that is in WordPress Core, it&#8217;s built on a browser API that is called Speculation Rules API. We can talk about maybe two things. There&#8217;s like, well, how can you use the Speculation Rules API? There&#8217;s different ways to configure it, and that&#8217;s something that we could apply in WordPress. But then we could go beyond that, and I&#8217;m probably not the best person to speak about that, but we could also think, how can you actually, what could the Speculation Rules API possibly do, that it isn&#8217;t able to do today?</p>\n\n\n\n<p>So in terms of using the Speculation Rules API, it allows different configuration modes in for what is called eagerness. And you actually said it right. It&#8217;s called conservative, the mode that WordPress currently uses. And it just means, I think it is conservative in the sense that it is the safest measure if you want to make sure you only load URLs that the user actually goes to.</p>\n\n\n\n<p>But it&#8217;s also the least performance of all the options. It&#8217;s always a trade off because unfortunately we cannot predict the future, so there&#8217;s no real wizardry going on here. And because of that, there is always going to be a trade off. You can use signals that are very reliable on the user visiting the other URL, like clicking on the link. There is an scenario where you click a link and then you pull your mouse away before you let go of your finger. We probably all have done this, but we probably do this like 1% of our clicks, if even that. But people do this occasionally, very occasionally.</p>\n\n\n\n<p>So that&#8217;s the way where a click would not trigger the actual URL to the link to be, that wouldn&#8217;t result in the user visiting the other URL. This would be the one example where conservative speculative loading would still load the other URL and the user wouldn&#8217;t go to it. But I think that risk, that trade off is very, very little because of how rarely that happens.</p>\n\n\n\n<p>[00:15:46] <strong>Nathan Wrigley:</strong> Right, so the posture of the Performance Team was to go conservative. So although it&#8217;s not the most performant, it is the least likely to end up in, you know, needlessly downloading content that is perhaps never going to be looked at.</p>\n\n\n\n<p>But again, just moving ourselves away from WordPress for a minute, the Speculation Rules API, if we were to go on the more eager side, what kind of things could be brought to bear? And again, not in the WordPress setup at the moment, but I know that you can modify those things. But what can the Rules API do, if you go like full eager?</p>\n\n\n\n<p>[00:16:18] <strong>Felix Arntz:</strong> Right. So you can also use, the next after conservative is called moderate. That uses signals that are less explicit, like a hover. Again, I have to specify, on desktop it uses hovering, because on the phone you can&#8217;t hover, like you don&#8217;t have a mouse and it doesn&#8217;t know where your finger is if you don&#8217;t press the screen.</p>\n\n\n\n<p>So, essentially, moderate on desktop, it relies on the hover over a link to preload the URL that is behind that link. So that generally, yeah, of course if you hover over link and then you click it, there may be like a second, easily a second between this, or there may even be five seconds in between those two actions, right? And sometimes you hover and click immediately. Other times you hover and you get back there, and then you click, and in that case, the whole page can technically be already loaded.</p>\n\n\n\n<p>So that&#8217;s the part where speculative loading, if you configure it more eagerly, you can get to situations where you get instant page load. You go to the other page and it&#8217;s already completely loaded. There&#8217;s, for instance, there is also Core Web Vitals, metric Largest Contentful Paint, which measures the load time speed. So you can get to an LCP of zero. Like, literally. If you use it, for instance as moderate eagerness, let&#8217;s say your page normally takes two seconds to load completely, and you hover over a link, and then you get back there like three seconds later, you click, it&#8217;s already there, and your LCP is literally zero because you didn&#8217;t need to wait at all.</p>\n\n\n\n<p>That&#8217;s the performance power that it has. But of course, it does also come with a trade off to consider. Like, how do you configure this in a way that it&#8217;s the least wasteful? And wasteful in the sense of loading URLs that the user does not go to, ends up not navigating to. But you have to basically weigh off, what is the performance gain? How do users typically use your website?</p>\n\n\n\n<p>There&#8217;s also, there&#8217;s a lot of individual configurations that websites may want to do on their specific site. So going back to the conservative option that WordPress now uses, it&#8217;s just that, it&#8217;s simply that we want to give the bare minimum feature and we want to make the feature available in general to WordPress sites. But because WordPress is so massive, you need to go with a literally conservative default.</p>\n\n\n\n<p>[00:18:25] <strong>Nathan Wrigley:</strong> Okay. So that&#8217;s all really interesting, but it sounds like all of this is happening in the browser. So all of these events are being triggered by the browser. Again, forgive my ignorance, I&#8217;m presuming that Chromium, Chrome, Firefox, all of the other variants that there may be out there, I guess they&#8217;re all shipping some variant of this inside the browser because obviously it can&#8217;t be WordPress that&#8217;s doing this.</p>\n\n\n\n<p>If that&#8217;s the case, is there kind of like a broad consortium of people who are working on this initiative, maybe other similar related performance initiatives, and trying to make them all browser compatible?</p>\n\n\n\n<p>[00:19:03] <strong>Felix Arntz:</strong> So there is, the Speculation Rules API is currently, it&#8217;s available in Chrome, Edge and Opera, so in the Chromium based browsers, but it&#8217;s not available yet in Safari and Firefox. That means that people that use Safari or Firefox, they&#8217;re basically just not going to get the benefit.</p>\n\n\n\n<p>[00:19:18] <strong>Nathan Wrigley:</strong> So it&#8217;s like a progressive enhancement. There&#8217;s no downside, it&#8217;s just an upside.</p>\n\n\n\n<p>[00:19:22] <strong>Felix Arntz:</strong> Exactly. So because overall the browsers that support it are very widely used, plus the other browsers not having any negative effects of this feature being on a website, that&#8217;s why we thought it was a good time to roll it out.</p>\n\n\n\n<p>[00:19:36] <strong>Nathan Wrigley:</strong> Okay, that&#8217;s really interesting. It just suddenly, and completely unrelated to the conversation that we&#8217;ve had so far, it kind of makes me think that maybe in the future there&#8217;ll be a hardware layer to this. You know, imagine if my mouse had built into it some pressure sensation, or even proximity sensor where it could perceive that, you know, my finger is descending and it could fire the signal from the mouse to say, yeah, he&#8217;s about to click. Or even in a mobile phone, you know, you were mentioning earlier, we don&#8217;t know where your finger is. Maybe at some point in the future we will know where your finger is.</p>\n\n\n\n<p>[00:20:09] <strong>Felix Arntz:</strong> That would be really powerful, yeah.</p>\n\n\n\n<p>[00:20:10] <strong>Nathan Wrigley:</strong> It&#8217;d be kind of interesting. Okay, you heard it here first. But it&#8217;s not there yet. So, what has been the way that this has been implemented? My understanding is that you launched this as a plugin. I think you got a fairly high user account. I think 30,000, 50,000 or something websites.</p>\n\n\n\n<p>[00:20:27] <strong>Felix Arntz:</strong> I think it&#8217;s now at 50,000.</p>\n\n\n\n<p>[00:20:28] <strong>Nathan Wrigley:</strong> 50,000. So tons of data coming back. And presumably that data gave you the confidence to, yeah, let&#8217;s push this through. And I have a memory that, broadly speaking, you got fairly close to a 2% productivity gain. And obviously at 43% of the web, if we can do things 2% faster, doesn&#8217;t sound like a lot, 2%. But 2% of everything that WordPress gives up, that&#8217;s a lot.</p>\n\n\n\n<p>[00:20:53] <strong>Felix Arntz:</strong> Performance is really like, people say sometimes things are numbers games, but performance is a tiny numbers game. Like it&#8217;s very hard to make performance wins sound very appealing. It&#8217;s like, here is 2% win. We scratched off 80 milliseconds of this, and it&#8217;s like, what is this even, like.</p>\n\n\n\n<p>[00:21:08] <strong>Nathan Wrigley:</strong> But it literally is human years. It&#8217;s probably decades of time when you think about the internet as a whole. If you think about it in that sense, it&#8217;s really quite a lot of time.</p>\n\n\n\n<p>[00:21:18] <strong>Felix Arntz:</strong> Exactly, and I think it&#8217;s important to remind ourselves of that sometimes. I feel myself like announcing something where it&#8217;s like, oh, here we scratched 80 milliseconds off. It sounds like nothing. It is quite something, but it sounds like so little that, I don&#8217;t know, I feel self-consciously saying such a tiny number as a great win.</p>\n\n\n\n<p>But yeah, again, like I think it, you exactly mentioned it, the scale of rolling out performance enhancements like this, it really makes the number matter. And also, people browse so many webpages a day, like even for an individual person. If you go on one website, you easily might visit 10 URLs or more, and that&#8217;s just one website. So think about , again, I&#8217;m just continuing with that number, like if you had 80 milliseconds gain on all the webpages you visit in a day, I don&#8217;t know, it might come out at some seconds, maybe a minute, who knows. And if you do that every single day, like you gain time.</p>\n\n\n\n<p>[00:22:09] <strong>Nathan Wrigley:</strong> Yeah, I agree. It&#8217;s difficult to parse, isn&#8217;t it? The human brain doesn&#8217;t kind of work that microscopic level. That really tiny fraction of time is so difficult to become important. But there&#8217;s this compound interest effect to it. You know, the more that it adds up, the more time you spend on the internet every day clicking things. And I suppose the curious thing here is, nobody even knows that it&#8217;s happened. You would presumably just think, gosh, that is a very quick website. You know, I&#8217;m having a fabulous experience here. Everything&#8217;s loading amazingly. They must have an amazing server set up or, you know, they&#8217;ve got everything configured perfectly. And all the while it&#8217;s the Speculation Rules API working in the background.</p>\n\n\n\n<p>But I think we&#8217;ve got it, you know, it&#8217;s adding up to tons of time, probably years, maybe decades of time when you throw that across the whole footprint that WordPress have.</p>\n\n\n\n<p>However, most people who don&#8217;t follow the WordPress news really, really carefully probably won&#8217;t know about this. And there&#8217;s nowhere to know about it really, apart from WordPress journalism, and the blog posts that go out from the Performance Team. Because there&#8217;s no way in the WordPress UI, there&#8217;s no setting, there&#8217;s no menu item to go to, there&#8217;s no toggle, there&#8217;s none of that.</p>\n\n\n\n<p>So that then leads me to ask, is there a way to modify this? If you have a need for more eager. Or you just wish to, I don&#8217;t know, you&#8217;ve got a desire to turn it off for some reason. Can it be modified with code, with hooks, with whatever?</p>\n\n\n\n<p>[00:23:31] <strong>Felix Arntz:</strong> Yeah, certainly. Quick context on the reason that there is no UI in WordPress Core to control it, is that it&#8217;s considered a very technical feature, and the philosophy of WordPress Core says, decisions not options. That&#8217;s one of the Core philosophies. So try to use defaults that work for the majority, and most people won&#8217;t have to change. And then especially when it comes to very technical things, you don&#8217;t want to bother an end user that just wants to maintain, create their website with, here you need to learn now about this complex Speculation Rules API.</p>\n\n\n\n<p>Like, we already talk about this for like 30 minutes now, and there&#8217;s probably so much more to uncover. So you can imagine that certain site owners don&#8217;t want to deal with that. So that&#8217;s why there&#8217;s no UI in WordPress Core. But it can be modified through hooks like you&#8217;re saying. There are several filters and actions to modify the behavior programmatically.</p>\n\n\n\n<p>And in addition, the Speculative Loading plugin that existed prior to the Core launch, that still exists and it&#8217;s now, when you install it on top of 6.8, it still serves a purpose. While it doesn&#8217;t ship the whole API anymore, because that&#8217;s now part of WordPress Core, it&#8217;s still includes a UI where you can configure it via UI in different ways.</p>\n\n\n\n<p>And it also changes the default behavior of WordPress, for the speculative loading feature. And that&#8217;s essentially because when we started the plugin, we went with a more aggressive default, because we want to know, the plugin only launches at first at small scale, it&#8217;s meant to, especially in the case of a feature plugin, it&#8217;s meant to inform us about how well it&#8217;s working, are there potential issues, and so on.</p>\n\n\n\n<p>So we went with a more more performant configuration out of the box with the Speculative Loading plugin. So if you use the plugin, it will use the moderate eagerness that I mentioned before. And then in addition, it uses, and we haven&#8217;t covered that at all yet, so it pre-renders the URL. So I can explain that briefly.</p>\n\n\n\n<p>The WordPress Core implementation, the Speculation Rules API allows you two alternative modes for speculatively loading a URL. Either you can pre-fetch the URL, or you can pre-render the URL.</p>\n\n\n\n<p>Pre-fetching means you essentially just load the, you get the HTML content already, but then you don&#8217;t do anything else. Like, it doesn&#8217;t load any JavaScript or it doesn&#8217;t load any CSS or images, it still waits with all of that until you go to the other page.</p>\n\n\n\n<p>With pre-render, it does everything, like literally everything. It loads the HTML, it loads also all the JavaScripts, CSS, images and whatever else is on your page. And it even renders this in the browser, like it basically does everything as if you were already on the page in the browser. Let&#8217;s think about it as if you had the page open in another tab and you couldn&#8217;t see it.</p>\n\n\n\n<p>[00:26:08] <strong>Nathan Wrigley:</strong> Yeah, you&#8217;ve just like pulled back a curtain suddenly and there it is. It&#8217;s just, it always there. You just couldn&#8217;t see it and suddenly.</p>\n\n\n\n<p>[00:26:14] <strong>Felix Arntz:</strong> And the pre-rendering is the thing that can get you to those immediate page loads. Because when you use pre-fetching, it only loads the HTML, so then when you get to the page, it&#8217;ll be faster, but you still have to load all the other things, and render it. But pre-render is where, if you have pre-render and eagerness of moderate, and then we go back to our previous example, you hover over link, go back there, two seconds, three seconds later, then you might get this immediate page load with LCP zero.</p>\n\n\n\n<p>[00:26:43] <strong>Nathan Wrigley:</strong> Okay, that&#8217;s really interesting. So you&#8217;ve kind of got two options. The first option is just accept WordPress Core. That&#8217;s how it is. And then, maybe three options. The second option then might be you can modify things with hooks and what have you. And I&#8217;m going to link to the articles that Felix wrote in the blog post that goes with this. So go to wptavern.com and search for the episode and you&#8217;ll be able to find all the bits. It&#8217;s more easy for me to say that than it is to read out the blog titles and things.</p>\n\n\n\n<p>And then the other option, the third option would be to download the plugin, which gives you a UI, but just caveat emptor, beware, it will then automatically make things moderate. It&#8217;s going to be doing things in a more, a slightly more aggressive way.</p>\n\n\n\n<p>[00:27:21] <strong>Felix Arntz:</strong> It brings you better performance, but it might also have more trade offs on, it will load, certainly to some capacity, load URLs that may not be navigated to. If you install the plugin, just keep in mind that the UI that it provides also would allow you to go back to the WordPress Core default. If you just want a UI and you install the plugin, just go into the UI of the plugin immediately, change it back to conservative pre-fetch, and you&#8217;re back at what Core would do as well.</p>\n\n\n\n<p>[00:27:45] <strong>Nathan Wrigley:</strong> Great. Yeah, thank you. Now you mentioned LCP and things like that. And I think there&#8217;s been an obsession for the last, let&#8217;s go for four years, with speed and trying to get Lighthouse scores to be impressive for your website. I&#8217;m curious, is there a way that Google scraping the internet can perceive any of this?</p>\n\n\n\n<p>In other words, if you do this, are you doing it simply to make your visitors happy, because they&#8217;re the people who are doing the clicking or what have you? Or is there some like Core Web Vitals metric which can be improved by this? Because it feels like there couldn&#8217;t be, because I doubt that Google Bot has the capacity to kind of speculatively load anything, but maybe there&#8217;s some flag in the, I don&#8217;t know, I have no idea how that would work.</p>\n\n\n\n<p>[00:28:31] <strong>Felix Arntz:</strong> So, that&#8217;s a great question. I think you&#8217;d, certainly when you apply performance enhancements like this, the goal is that they benefit your website&#8217;s end users. Google, of course, would love to know how well these features work, right? And also the people that work on the actual Speculation Rules API would love to see how the features are used in production, on production sites. And we, as a Performance Team, would also like to know that, how it goes with WordPress specifically.</p>\n\n\n\n<p>So there is a public data set called Chrome User Experience Report, which is sourced from anonymous data from users that use Chrome and have opted into this anonymous data tracking. So there is essentially a data set that collects the performance data of people visiting websites. And that is made publicly available, you can literally, if you know how to use BigQuery, which is this kind of advanced version of MySQL, where you can query gigantic amounts of data, you can query the Chrome User Experience Report data set, and you could be checking like, I don&#8217;t know, as long as sites that appear, it basically aggregates all the page, all the data by origin, so the domain.</p>\n\n\n\n<p>Any site that is relatively popular is in there. I don&#8217;t know exactly what the threshold is, but something like, maybe like at least 50 monthly users or something like that. So then your site will appear in there and you could query this for your own site to see how your site is doing. And you could do this every single month. And you get like a chart, how the performance of your site is doing over time.</p>\n\n\n\n<p>Of course, neither Google nor we as a Performance Team cares about one specific site. We&#8217;re doing things like in our team, we were building things for WordPress, for the WordPress ecosystem, try to improve the performance of the ecosystem as a whole. So I have been working a lot in the past years and learning a lot about this stuff. How to query the Crux, that&#8217;s a short version of it, Crux, the Crux Report, to gain insights on, how do you possibly measure the impact a certain feature has on these metrics?</p>\n\n\n\n<p>There&#8217;s another data set called HTTP Archive, which is the domains that are in this are also sourced from the Crux Report. But what HTTP Archive is, it basically scrapes all of these URLs every single month, one time, and gets all sorts of public information from these URLs, like which technologies it uses, does it use WordPress? Does it use, I don&#8217;t know, React or whatever, all these things. It also stores, from this one momentary point, it also stores the actual HTML body, and it&#8217;s a gigantic data set. And also that is public as well. You can look it up on httparchive.org and how to use it.</p>\n\n\n\n<p>So the goal of these efforts is to make these different performance data and to basically assess the health of the web ecosystem, publicly available, and then also these, especially HTTP Archive has a lot of charts on their own website based on their own data that essentially, yeah, makes it easily available without having to query BigQuery data.</p>\n\n\n\n<p>But when you actually can query BigQuery data, it becomes really powerful. So we can combine the data from HTTP Archive to see which origins are using WordPress. So then we get like a scaled down version of the whole web that is just the WordPress sites. And then we can combine it with the Crux data that has the performance results for all origins, but scope it down to only the origins that use WordPress.</p>\n\n\n\n<p>And that way we can see, for instance, the median LCP for a given month across all WordPress sites is this. Or the median INP and all the other metrics. More importantly, what we have been using as a more important metric though, is what&#8217;s called the passing rate. For every Core Web Vitals metric, there is a threshold where it&#8217;s, under this threshold is good, above this threshold, it&#8217;s not good. So for LCP for instance, that&#8217;s 2.5 seconds.</p>\n\n\n\n<p>And passing rate is essentially the number of, in this example, is the number of origins that have a median LCP that&#8217;s better than 2.5 seconds, the percentage of origins that have an LCP that&#8217;s better than 2.5 seconds. And that you can track over time to see how WordPress LCP is improving or decreasing over time. That&#8217;s how we essentially monitor performance for WordPress at a high level.</p>\n\n\n\n<p>And then we&#8217;ve been doing all sorts of experiments to try to get feature specific improvements. That&#8217;s really the difficult part because these data sets only gather data, the Archive data set only gathers data once a month, the Crux data set gave this data, it has all the data, but only the performance data. So it does not know, at what point did you activate a certain feature or deactivate another feature? That data doesn&#8217;t exist. So we can only make assumptions.</p>\n\n\n\n<p>Like, for instance, even when you want to measure the difference, and like an easy example, and that&#8217;s already complicated, is to measure the difference from one WordPress version to the next. HTTP Archive has data, whether a site is on, let&#8217;s say 6.8 or 6.7, but it&#8217;s from one specific moment in time. And we generally broaden these moments in time to the whole month because that&#8217;s the generally, like they do it once a month. If you see that a site is on 6.8, I think the HTTP Archive runs, like the actual queries usually run somewhere between 20th and 25th of the month.</p>\n\n\n\n<p>So if you see that the site is 6.8, you don&#8217;t know, is the site on 6.8 the entire month or did it just update to 6.8 a day before and most of the month data is actually the previous version? This is just unknowns that we have to deal with. And the data set being so huge, because WordPress is so popular, that helps a lot to sort of like make these unknowns maybe less impactful. Because if you&#8217;re at scale see that 6.8 has a big improvement, we can&#8217;t say that this value precisely is correct, but if it&#8217;s a clear improvement, we can assume that there is an actual improvement to a certain degree.</p>\n\n\n\n<p>And doing that for feature specific level is even more complex. I don&#8217;t think we have time to get into this too much right now, but I just want to say that this 1.9% value that is in the blog post is based on such an effort, where I try to look at all the sites that have speculation rules, and I looked at all the same sites before they activated speculation rules and get this median difference between all of them. And I don&#8217;t even know how to explain anymore because I don&#8217;t remember, because it was so complicated.</p>\n\n\n\n<p>[00:34:42] <strong>Nathan Wrigley:</strong> I am so glad that you are able to explain it though. I mean, firstly, really interesting, all of that, really interesting. Because you just sort of peeled back a whole curtain that I didn&#8217;t even know existed. So there&#8217;s just this aggregated, opted-in data coming out of the browser, dropping into this massive data set. I can only imagine what that is like to deal with.</p>\n\n\n\n<p>But it does mean that you&#8217;ve got anonymised data. You can make reasonable guesses, in the aggregate, about what&#8217;s happening. You know, you can refine it to WordPress, you can refine it to 6.7, 6.8, okay? And day by day, maybe it&#8217;s not meaningful. But if you spread it over one month, six months, what have you, more and more trends start to pop out.</p>\n\n\n\n<p>So you can see over time, you&#8217;ve got this 1.9%. And it, terribly complicated though it might be, I&#8217;m glad that you did that work for us. That&#8217;s amazing. Okay. And I didn&#8217;t know that whole thing was going on.</p>\n\n\n\n<p>And again, getting back to the point that you made at the beginning, the whole purpose of this is to make it better for your users. The purpose is not for the data that Google&#8217;s gathering, but it&#8217;s gathering it. And it&#8217;s helpful because people like you can then use it and make reasonable assumptions about what the rest of us ought to be doing with our WordPress websites. But the key metric there is, does it perform better for your users? And of course, we know the answer to that.</p>\n\n\n\n<p>[00:36:00] <strong>Felix Arntz:</strong> Just wanted to quickly add like we have been, these two data sets have been important source for us as a Performance Team from the very beginning in terms of even prioritising what we work on. There&#8217;s ways to get a high level idea. Like, out of all the 50 things that we could do to improve performance, which have shown to be the most impactful on the web so far outside of WordPress, or maybe even on the few WordPress sites that already use it through some other way. So it has helped a lot on the prioritisation, and personally a big advocate for data driven decision making. And in many parts of the WordPress project, we are not able to do that because we don&#8217;t have much data. But I&#8217;m really pleased that on the performance side, there is this big data set that can be used to see what is actually impactful.</p>\n\n\n\n<p>[00:36:46] <strong>Nathan Wrigley:</strong> Yeah, you can be really confident that your decisions are based upon fact, which is so nice. A lot of the WordPress project is, you know, intuition and design and things like that, and it&#8217;s hard to get agreement about that, and hard to get things right for everybody. But in this case, that&#8217;s slightly different.</p>\n\n\n\n<p>[00:37:00] <strong>Felix Arntz:</strong> For anybody that&#8217;s interested in this to learn more, I did write a blog post on makewordpress.org/core at some point about it. How to assess performance with HTTP Archive, something like that. That&#8217;s something that we can probably, that you can probably look at. There&#8217;s a whole collab. I worked out for a while on a collab to teach as a sort of like tutorial, how to get started with this for anybody that&#8217;s interested.</p>\n\n\n\n<p>[00:37:23] <strong>Nathan Wrigley:</strong> Okay, I&#8217;ve got a couple of pieces that I&#8217;ve got open over here, which are probably not the piece that you&#8217;ve just mentioned. So when I come back and edit this, I&#8217;ll make sure that I get in touch with you and we find that, and we&#8217;ll put that into the show notes. So there&#8217;ll be at least three things that you, dear listener, can go and check out.</p>\n\n\n\n<p>I&#8217;m just wondering if there are any situations, because we know what people are like. Performance experts, they love to configure their servers, they love to put things at the edge that, you know, all these clever things that are going on. Are there any scenarios where things like the speculative loading that that can conflict, or overlap or be something that you actually don&#8217;t want to do because you&#8217;ve already got something in place that might be handling, I don&#8217;t know, let&#8217;s say for example, you&#8217;re in team Cloudflare, and you&#8217;ve jumped in on all the different things that they&#8217;ve got? Perhaps they do this already. I don&#8217;t know. But I&#8217;m just wondering if there are any scenarios where, let&#8217;s say I&#8217;m a hosting company, or I&#8217;m just really into my performance. Are there any scenarios where I need to be mindful, maybe I want to switch this off?</p>\n\n\n\n<p>[00:38:22] <strong>Felix Arntz:</strong> I don&#8217;t think there&#8217;s a lot on the hosting side, but there can be on the whatever client side&#8217;s technologies you use. So because this speculative loading happens in the browser, so the, I don&#8217;t think there&#8217;s anything on the hosting side, or server side, that could do something similar. I think that wouldn&#8217;t work.</p>\n\n\n\n<p>But there are other ways that some similar things like this have already been done outside of a browser specification, outside of a browser API. Like there are certain JavaScript frameworks, for instance, that have something like speculative loading. Like, if you have a Next.js site, for instance, which I think is not very common to be used together with WordPress, but if you do have a Next.js site for instance, it might load URLs speculatively too, but through its own mechanism, like a completely separate approach. I&#8217;m not sure about specific JavaScript libraries right now that do exactly this, but there are definitely things like it that some sites were already using before the browser Speculation Rules API came around.</p>\n\n\n\n<p>[00:39:15] <strong>Nathan Wrigley:</strong> Okay, so broadly speaking, if you&#8217;re a WordPress, a typical WordPress user, you&#8217;ve got nothing to worry about. And you probably know that you&#8217;ve got something interesting and unusual going on with loading things in a different way, so you&#8217;re probably okay.</p>\n\n\n\n<p>One of the things that I did want to know, I just wondered if there were certain, I don&#8217;t know, let&#8217;s say I&#8217;ve got a WordPress website, maybe there are bits of that website that I don&#8217;t wish to be speculatively loading.</p>\n\n\n\n<p>I&#8217;m not really sure what that might be. An example that I think came out of one of your blog posts was you took the example of a Woo, well, I presume it was WooCommerce, you know, the end of the URL being cart or something like that, you know, so forward slash cart, forward slash whatever.</p>\n\n\n\n<p>That&#8217;s possible though. I presume, again, with hooks you could say, okay, this predetermined set of URLs, we don&#8217;t want to speculatively load anything. That kind of stuff can be done. The URL parameters can be configured into all this.</p>\n\n\n\n<p>[00:40:05] <strong>Felix Arntz:</strong> Yeah, exactly. So you can exclude certain URLs, or URL patterns from being applied to the speculative loading. And you can also configure whether you want to exclude them entirely or whether you want to exclude them only from pre-rendering, but not pre-fetching.</p>\n\n\n\n<p>So this is important to consider because the WordPress site, well, probably now 95% of the sites with 6.8 use pre-fetch because that&#8217;s a default. There are still sites that change it to pre-render. And then there are different implications for the site, for the URLs that are pre-rendered.</p>\n\n\n\n<p>And one of the considerations is, that&#8217;s actually another reason why we went with pre-fetch. because also pre-fetch, even though it&#8217;s less performant than pre-render, is also a safer option at the scale that we roll this out to all WordPress sites. Because the only risk with pre-fetch occurs if there is a URL that modifies something just by visiting that URL, which is an anti-pattern, like you should not do this, but there are plugins that do this occasionally. For instance, if you have like a URL that&#8217;s called empty cart, and just by visiting that URL you empty your shopping cart.</p>\n\n\n\n<p>That means, if you speculatively load the URL and you don&#8217;t visit it, your cart is emptied. You don&#8217;t want that. This is the only risk with pre-fetch. But, for what it&#8217;s worth, WordPress, the WordPress Core implementation also includes some default exclusions already. One of them is that it won&#8217;t speculatively load any URL with query parameters, like those question marks, something. And that&#8217;s because most WordPress sites by far are using pretty permalinks, and on those sites, having a query parameters is extremely unusual. And if there is, it&#8217;s usually from a plugin that does something specific.</p>\n\n\n\n<p>And so that&#8217;s why we exclude URLs because the chance that, like WordPress Core doesn&#8217;t have anything in the front end that will change something when you visit a URL, but plugins might. And plugins would usually handle this through query parameters if they do, and that&#8217;s why we exclude any query parameter URLs.</p>\n\n\n\n<p>[00:42:07] <strong>Nathan Wrigley:</strong> Yeah, I know that you will not have an answer to the next question, but I&#8217;m going to ask it anyway. But I&#8217;m just curious on your thoughts about it, because I know that anybody listening to this, there&#8217;s going to be a proportion of people thinking, wait, we want less bits traveling across the internet.</p>\n\n\n\n<p>And I&#8217;m thinking about the environmental impact of things now. You know, we don&#8217;t want pre-fetching anything, because that&#8217;s then potentially just wasted energy. Just carbon being burnt for stuff which may, or may not, be looked at. And obviously the WordPress approach that you&#8217;ve taken is to try and minimise that.</p>\n\n\n\n<p>But I just wondered if you had any thoughts, you know, around that and whether you could sort of calm people down about that or whether or not it, was that whole thing disregarded? Where does it fit into the thinking of all of this?</p>\n\n\n\n<p>[00:42:52] <strong>Felix Arntz:</strong> Yeah, like I said in the beginning, it is a trade off that you have to make, but it also depends like, which decision you take probably depends on how your site is being used, like what is the best configuration of speculative loading for your own site?</p>\n\n\n\n<p>If you go with a too eager configuration where there&#8217;s tons of URLs are eagerly loaded and then they might never be visited, then this definitely has a negative impact, like you&#8217;re saying. But obviously the ideal outcome is that the wasteful reloaded URLs are minimised and at the end of the day you, by speculatively loading, you improve the user experience.</p>\n\n\n\n<p>I can&#8217;t really answer where you draw the line in that. That being said, the adverse effects of URLs being loaded that you don&#8217;t navigate to with this conservative eagerness is so little. That&#8217;s why we chose that value to be the default. And you can go for more performant solutions, or configurations, but when you do so, please test how that works out.</p>\n\n\n\n<p>You can also, don&#8217;t want to get too deep into this, but you can also, if you have some kind of analytics provider for your site, you can gather like performance data or you can see which links users typically click on. And then you could configure speculation rules in the way that these links specifically may use like a more eager configuration. But the other ones don&#8217;t.</p>\n\n\n\n<p>This is where people really get, I&#8217;ve not personally done this but when, I&#8217;ve heard from other people when they work with enterprise clients, they really go in and look at, oh, when somebody has sent this URL, they usually click one of these four URLs, one of these four links, and then you can configure speculation rules to say, these four links should have moderate eagerness, but all other ones only conservative, for instance.</p>\n\n\n\n<p>[00:44:22] <strong>Nathan Wrigley:</strong> I can see a whole third party ecosystem of plugin developers kind of rubbing their hands together. You know, those that create performance plugins kind of leaning into exactly what you just said. Here&#8217;s your entire WordPress website, and here&#8217;s what we think, you know, in the same way that SEO plugins might give you a traffic light. Here&#8217;s a set of URLs, which we think you are not serving in the way that is going to be beneficial to your users or what have you. So, oh, that&#8217;s interesting as well.</p>\n\n\n\n<p>[00:44:46] <strong>Felix Arntz:</strong> The tough thing though is that it&#8217;s usually, I think it&#8217;s going to be very heavily dependent on the individual site. That&#8217;s where my hesitation is with that is that like, I&#8217;m not sure how much a plugin, a generally applied plugin, throughout the ecosystem could predict that. I think it&#8217;s often depending on the layout of the site. What is even the content of the site, right? What do people mostly click on? I think that makes it challenging from a general plugin perspective. Like to me, that&#8217;s mostly something that developers would do for their client&#8217;s websites, or agencies would do for a client&#8217;s website or at an individual level.</p>\n\n\n\n<p>[00:45:18] <strong>Nathan Wrigley:</strong> Yeah. Well, I mean, it&#8217;s just the beginning, isn&#8217;t it? It&#8217;s dropped in fairly recently. No doubt, the WordPress ecosystem will kind of figure out a posture on this. Maybe third party plugins will come along. Maybe developers will produce more documentation about how to wrangle it. How to surmise whether or not your website is using the Speculation Rules API in a way which is helping you, I don&#8217;t know, measuring the cost of your server infrastructure and what have you. But just the beginning.</p>\n\n\n\n<p>So there you go. Now, dear listener, you know a whole load of stuff about WordPress 6.8 that you didn&#8217;t. Before because probably, it was completely invisible to you. So, is there anything we missed, Felix? Is there any burning issue that you think we did not cover that and that was important?</p>\n\n\n\n<p>[00:45:58] <strong>Felix Arntz:</strong> No. I think we covered pretty much anything, everything. I just wanted to add that the new data from the Crux Report comes out, I think actually it came out yesterday, I believe. So it comes out every second Tuesday of the month. So I&#8217;m about to look at that. I want to take a look at that, definitely by the end of this week to see whether we can get any impact data now that speculative loading is out because, so the way that this works is the Crux data is released for the month before. That&#8217;s what happened, I think yesterday. So now we should have data on April where WordPress 6.8 came out. So now we can see how much did this feature launching in 6.8, and 6.8 in general, affect performance, hopefully in a good way.</p>\n\n\n\n<p>[00:46:39] <strong>Nathan Wrigley:</strong> Okay. Yeah, yeah. So this is actually for you, quite a big moment. You are suddenly going to get this data dump, which is going to actually cover this 43% of the web. It will be on all, well, most of the sites, and you are suddenly going to see what the impact is. Do you know, if you write that up, I will find it, if it&#8217;s out before I produce this post, then I will definitely link to that. And I&#8217;ll be fascinated to see if we can calculate how many decades, or weeks, or months, or years of time we have actually saved. That&#8217;s absolutely brilliant.</p>\n\n\n\n<p>Thank you so much for explaining it, helping to create it in the first place, and basically improving WordPress in a very, very demure way. You know, not shouting it from the rooftops, but doing a lot in the background to make everybody&#8217;s experience of the web a whole lot better. Felix Arntz, thank you so much for chatting to me today.</p>\n\n\n\n<p>[00:47:29] <strong>Felix Arntz:</strong> Yeah. Thank you.</p>\n</div></details>\n\n\n\n<p>On the podcast today we have <a href=\"https://felix-arntz.me/\">Felix Arntz</a>.</p>\n\n\n\n<p>Felix is a Senior Software Engineer at Google, and a WordPress Core committer from Germany, currently residing in San Francisco, California. He helped establish the WordPress Core Performance Team and has been heavily contributing to its efforts. He has been using WordPress for a decade and contributing back to the project since 2015. More recently, he has stepped into the role of the inaugural Performance Lead for the WordPress 6.2 release and subsequently of the 6.3 and 6.8 releases. In the latter release, he spearheaded development and launch of the new speculative loading feature, which is the focus of the podcast today.</p>\n\n\n\n<p>Speculative loading is one of the most important, and yet almost invisible, performance enhancements of recent times. If you’re on WordPress 6.8, this new feature is already active on your site, working quietly in the background to make page navigation faster. But you might never know from the WordPress UI, there’s no menu, no toggle, and no obvious indicator to show it’s there.</p>\n\n\n\n<p>Felix explains exactly what speculative loading is, and why it feels almost like browser magic. The ability for WordPress, using the browser’s new Speculation Rules API, to load the next page just as a user is about to visit it. It’s a clever use of browser signals like mouse clicks and hovers to anticipate navigation, shaving off precious milliseconds, sometimes even providing what feels like an instant page load.</p>\n\n\n\n<p>Felix clarifies the difference between conservative and more aggressive approaches to speculative loading, and why the WordPress Core team opted for the safest, least wasteful option by default, while still giving developers, or advanced users, the hooks and tools to customise or even disable it as needed.</p>\n\n\n\n<p>Felix discusses the origins of the feature as a plugin, the testing and data collection undertaken with tens of thousands of sites, and how this real-world data gave the team confidence to ship speculative loading to all WordPress users. We talk about what those performance wins mean at scale. How a 2% improvement on 43% of the internet translates into saving users untold hours of waiting collectively.</p>\n\n\n\n<p>We also get into the weeds on measurement and methodology. How the team uses data from the Chrome User Experience Report and HTTP Archive to track web performance, prioritise features, and validate real-world impact. Felix offers insight into how these global, anonymised data sets allow the Performance Team to make truly data-driven decisions.</p>\n\n\n\n<p>Beyond the tech, Felix addresses practical considerations, such as how to opt out, or fine-tune speculative loading if you have specific needs, how environmental concerns are balanced by default configurations, and how plugins or agencies might build on this foundation in the future.</p>\n\n\n\n<p>If you’ve ever wondered how large-scale, browser-level improvements make their way into WordPress Core, or simply want to know if there’s a way to make your own WordPress site that much faster, this episode is for you.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Useful links</h2>\n\n\n\n<p><a href=\"https://make.wordpress.org/performance/handbook/about-the-team/\"> WordPress Performance Team</a></p>\n\n\n\n<p><a href=\"https://codelabs.developers.google.com/speculation-rules\">Achieve instant navigations with the Speculation Rules API</a></p>\n\n\n\n<p><a href=\"https://developers.google.com/search/docs/appearance/core-web-vitals\">Understanding Core Web Vitals and Google search results</a></p>\n\n\n\n<p><a href=\"https://wordpress.org/plugins/speculation-rules/\">Speculative Loading plugin</a></p>\n\n\n\n<p><a href=\"https://felix-arntz.me/blog/speculative-loading-history-performance-feature-in-wordpress-core/\">Speculative Loading, or A Brief History of Landing a Performance Feature in WordPress Core</a></p>\n\n\n\n<p><a href=\"https://developer.chrome.com/docs/crux\">Overview of CrUX</a></p>\n\n\n\n<p><a href=\"https://cloud.google.com/bigquery\">BigQuery</a></p>\n\n\n\n<p><a href=\"https://httparchive.org/\">HTTP Archive</a></p>\";s: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, 28 May 2025 14:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i: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:93:\"Do The Woo Community: Reinventing Careers and Building Resilience in Tech with Mendel Kurland\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=97469\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:92:\"https://dothewoo.io/reinventing-careers-and-building-resilience-in-tech-with-mendel-kurland/\";s: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:155:\"Zach and Carl chat with Mendel Kurland, sharing stories of resilience, reinvention, and the human side of tech, wrapping it all in laughs and life lessons.\";s: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, 28 May 2025 09:32: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:8:\"Bob Dunn\";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:51:\"Matt: The Five Layers of Sharing Thoughts and Ideas\";s:7:\"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=142705\";s:7:\"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/05/sharing-levels/\";s: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:3920:\"<p>I&#8217;ve been thinking a lot about mimetic formation, how a thought becomes an idea, and how that idea gestates and evolves as it&#8217;s progressively shared in wider and wider circles.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"\" class=\"wp-image-142868\" height=\"198\" src=\"https://i0.wp.com/ma.tt/files/2025/05/five-layers-1024x335.png?resize=604%2C198&#038;quality=80&#038;ssl=1\" width=\"604\" /></figure>\n\n\n\n<p>During a recent product review of <a href=\"https://dayoneapp.com/\">Day One</a>, I was struck by how central the app is to my perspective on humans, relationships, and what we share. There are several layers to it, ranging from your innermost thoughts to what you share with the world. Each layer has its own context, challenges, and possibilities, and Automattic offers technology and products tailored to each.</p>\n\n\n\n<p>1. Layer one is your internal thoughts. Your consciousness, what exists only in your mind, or what I like to call meatspace. This space is yours and yours alone. This generative space is at the core of human creativity and existence.</p>\n\n\n\n<p>2. Layer two is triggered as soon as you put something into a medium, like writing it down. It’s everything that leaves your head, but is just reserved for you. In the past, we only had physical journals. Today, we have <a href=\"https://dayoneapp.com/\">Day One</a> as our strongest product in this space, but many people also have a private WordPress installation just for themselves. There are so many tools out there that help you create! Colors, brushes, canvases. Harper, for example, helps you write better — think of it as an open-source <a href=\"https://www.grammarly.com/\">Grammarly</a>, right now just in a few limited contexts, but in the future everywhere you write. </p>\n\n\n\n<p>3. Layer three is you and someone else. This is everything you share with one other person, which is an incredibly sacred act. <a href=\"https://dayoneapp.com/shared-journals/\">Shared journals</a> on Day One, messaging on <a href=\"https://www.beeper.com/\">Beeper</a>, DMs, private blogs with your best friend. A shared Google doc. This is its own special space. It has an intimacy and privacy that is core to the human experience. This is also phase 3 of Gutenberg, which is all about real-time co-editing and collaboration. This layer is the one I&#8217;m most excited about expanding in 2025 and 2026.</p>\n\n\n\n<p>4. Layer four is sharing within a finite group. N+1. It&#8217;s a space of collaboration and brainstorming with families, tribes, and teams. <a href=\"https://wordpress.com/p2/\">P2</a>, Linear, Github, group chats, and cozy communities. You lose some of the intimacy of layer three but gain more group intelligence.</p>\n\n\n\n<p>5. Finally, we have the fifth layer. This is the public layer, where I have spent a lot of my time at <a href=\"https://automattic.com/\">Automattic</a>. It is an extremely competitive space of social media and blogs: <a href=\"https://wordpress.org/\">WordPress</a>, <a href=\"http://wordpress.com\">WordPress.com</a>, and <a href=\"https://tumblr.com/\">Tumblr</a>. Once you publish publicly, you open yourself up to the beauty and chaos of the wider world. The best reason to blog is comments, the people who find you and add to your thoughts, who you never would have imagined. This is a crucible, but makes your own writing and thinking so much better, it&#8217;s worth the mishegoss. <img alt=\"🙂\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png\" style=\"height: 1em;\" /></p>\n\n\n\n<p>This has been kicking around in my head and at layer four for a while. Thanks to <a href=\"https://kelly.blog/\">Kelly Hoffman</a> for helping me get this to layer five.</p>\n\n\n\n<p>P.S. Happy 22<sup>nd</sup> birthday to WordPress! <a href=\"https://wordpress.org/news/2025/05/announcing-the-formation-of-the-wordpress-ai-team/\">Very excited about the new AI team on .org</a>.</p>\";s: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, 28 May 2025 00:55: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: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:43:\"Aaron Jorbin: Happy 22nd Birthday 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:31:\"https://aaron.jorb.in/?p=185698\";s:7:\"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:52:\"https://aaron.jorb.in/happy-22nd-birthday-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:862:\"<p>I don&#8217;t know about you, but <a href=\"https://wordpress.org/news/2003/05/wordpress-now-available/\">WordPress is feeling 22.</a></p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n\n\n\n<p>I am celebrating by helping WordPress do what it has done nearly every day for 22 years: <a href=\"https://core.trac.wordpress.org/changeset/60258\">getting</a> a little better (and <a href=\"https://core.trac.wordpress.org/changeset/60257\">being ok</a> making <a href=\"https://core.trac.wordpress.org/changeset/60256\">mistakes</a> in the process).</p>\n<p>The post <a href=\"https://aaron.jorb.in/happy-22nd-birthday-wordpress/\">Happy 22nd Birthday WordPress</a> appeared first on <a href=\"https://aaron.jorb.in\">Aaron Jorbin</a>.</p>\";s: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, 27 May 2025 23:37:32 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:6:\"jorbin\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}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:69:\"WordPress.org blog: Announcing the Formation of the WordPress AI Team\";s:7:\"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=18769\";s:7:\"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:85:\"https://wordpress.org/news/2025/05/announcing-the-formation-of-the-wordpress-ai-team/\";s: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:2959:\"<p>Today, I’m pleased to announce the formation of a new <strong>WordPress AI Team,</strong> a dedicated group focused on accelerating and coordinating artificial intelligence projects across the WordPress ecosystem.</p>\n\n\n\n<p>AI is already transforming how people create and manage content online. As this technology evolves, it’s essential that WordPress remains at the forefront, ensuring innovation happens in the open, guided by community values, and built to core standards.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Why This Matters</h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Strategic focus</strong>: A unified team stewards AI development thoughtfully, avoids fragmentation, and ensures alignment with the long-term goals of WordPress. </li>\n\n\n\n<li><strong>Shared innovation</strong>: Contributors and companies are actively exploring AI across the ecosystem. This team provides a central place to collaborate, share ideas, and build together.</li>\n\n\n\n<li><strong>Rapid iteration</strong>: Like the Performance Team, we’ll take a plugin-first approach. <a href=\"https://make.wordpress.org/core/2022/09/11/canonical-plugins-revisited/\">Canonical Plugins</a> will allow us to move quickly, gather feedback, and deliver real value without waiting on the Core release cycle.</li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\">What to Expect</h2>\n\n\n\n<p>The AI Team will:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Coordinate cross-team efforts to explore AI-powered features responsibly and inclusively.</li>\n\n\n\n<li>Publish and maintain a public roadmap of AI initiatives and Canonical Plugins.</li>\n\n\n\n<li>Collaborate closely with Core, Design, Accessibility, and other teams to ensure strong integration and shared standards.</li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\">Meet the Team</h2>\n\n\n\n<p>The WordPress AI Team brings deep experience in open-source, performance, and product development and a strong commitment to building AI features the WordPress way. The team will launch with the following team contributors:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>James LePage</strong> – Automattic</li>\n\n\n\n<li><strong>Felix Arntz</strong> – Google</li>\n\n\n\n<li><strong>Pascal Birchler</strong> – Google</li>\n\n\n\n<li><strong>Jeff Paul</strong> – 10up</li>\n</ul>\n\n\n\n<p>To help get things started, James and Felix will serve as the initial <a href=\"https://make.wordpress.org/updates/team-reps/\">Team Reps</a> in supporting team organization, communication, and coordination with other Make WordPress teams.</p>\n\n\n\n<p>This is an exciting and important step in WordPress’s evolution. I look forward to seeing what we’ll create together and in the open.</p>\n\n\n\n<p>If you’re interested in contributing or following along, please join the conversations in <a href=\"https://wordpress.slack.com/archives/C08TJ8BPULS\">#core-ai</a> and watch for upcoming meeting announcements on <a href=\"https://make.wordpress.org/ai/\">https://make.wordpress.org/ai/</a>.</p>\";s: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, 27 May 2025 16:28: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:12:\"Mary Hubbard\";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:109:\"Do The Woo Community: How One Solo Agency Owner Manages Hundreds of WordPress Sites (Without Losing His Mind)\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=97117\";s:7:\"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://dothewoo.io/blog/how-one-solo-agency-owner-manages-hundreds-of-wordpress-sites-without-losing-his-mind/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:191:\"Running a massive web design business solo, while focusing on one platform, automating wisely, networking locally, and keeping support simple can help with strategies to scale without stress.\";s: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, 27 May 2025 11:14: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:8:\"Bob Dunn\";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:102:\"Do The Woo Community: Community Engagement Strategies for Successful WooCommerce and WordPress Plugins\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=97436\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:101:\"https://dothewoo.io/community-engagement-strategies-for-successful-woocommerce-and-wordpress-plugins/\";s: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:194:\"In this episode of Woo Product Chat, co-hosts discuss \"community thinking\" in WordPress and WooCommerce plugins, highlighting the importance of user feedback and effective engagement strategies.\";s: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, 27 May 2025 08:44: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:8:\"Bob Dunn\";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:112:\"Do The Woo Community: WordPress Multilingual, Translation and Community with Pascal Birchler and Robert Windisch\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=97013\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:110:\"https://dothewoo.io/wordpress-multilingual-translation-and-community-with-pascal-birchler-and-robert-windisch/\";s: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:246:\"In this episode of The WordPress Way, listen to shared insights on translating WordPress, performance boosts, community involvement, and future multilingual features. They emphasize the ongoing need for translators and collaboration 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:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 26 May 2025 09:01:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";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:115:\"Gutenberg Times: Feature API, Playground, Gutenberg 20.9, Interactivity API, #WCUS and moar — Weekend Edition 331\";s:7:\"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=40505\";s:7:\"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:117:\"https://gutenbergtimes.com/feature-api-playground-gutenberg-20-9-interactivity-api-wcus-and-moar-weekend-edition-331/\";s: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:19961:\"<p>Howdy,</p>\n\n\n\n<p></p>\n\n\n\n<p>This week, I continued to learn about more plugins for the block editor. They might be new to the WordPress repository or just new to me, haha.  Also, Playground came up in the last couple of weeks, and I share two tutorials and a video about my workshop at WordCamp Europe.  And via the Feature API you can prepare your plugins for AI Agents. </p>\n\n\n\n<p>As every year, WordCamp Europe will also have a Live stream for the talks and keynotes. Just check out the website on Jun 6th, 2025.  The next Weekend Edition will drop in your inbox after WordCamp Europe and I will share some cool talks from the live stream. </p>\n\n\n\n<p>Until have a great time! </p>\n\n\n\n<p>Yours, <img alt=\"💕\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f495.png\" style=\"height: 1em;\" /><br /><em>Birgit</em></p>\n\n\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-small-font-size\">WordCamp Europe is just around the corner! <img alt=\"🎉\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f389.png\" style=\"height: 1em;\" /> If you want to meet up in Basel (June 4–7), <a href=\"https://calendly.com/pauli-haack/wordcamp-europe\">grab a slot on my calendar</a> or send me your link. <a href=\"https://mastodon.social/tags/WCEU\">#WCEU</a></p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-no-vertical-margin\"><a href=\"https://calendly.com/pauli-haack/wordcamp-europe\"><img alt=\"\" class=\"wp-image-40524\" height=\"367\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Book-a-meeting-with-Birgit-Pauli-Haack.jpg?resize=652%2C367&#038;ssl=1\" width=\"652\" /></a></figure>\n</div></div>\n\n\n<section class=\"wp-block-newsletterglue-group\" style=\"padding-top: 10px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; margin-top: 0px; margin-bottom: 0px;\"></section>\n\n\n<p>ICYMI: <a href=\"https://us.wordcamp.org/2025/call-for-speakers/\"><strong>WordCamp US Call for Speaker is now live</strong></a> the deadline is June 20, 2025. WordCamp US will take place from August 26 to 29th, 2025. Similar to last year, there are no lightening talks, only long form talks, workshops, or campfire sessions. August 26 will be Contributor Day. Sessions start on August 27 in three tracks. You need to have a WordPress.org account to enter the form. The <a href=\"https://us.wordcamp.org/2025/call-for-sponsors/\">Call for Sponsors</a> has also been published. </p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https://us.wordcamp.org/2025/call-for-speakers-wordcamp-us-2025/\"><img alt=\"\" class=\"wp-image-40544\" height=\"343\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/WordCamp-US-2025-Call-For-Speakers-1.png?resize=652%2C343&#038;ssl=1\" width=\"652\" /></a></figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0-word-press-release-information\">Developing Gutenberg and WordPress</h2>\n\n\n\n<p><strong>George Mamadashvili</strong> just dropped the <a href=\"https://github.com/WordPress/gutenberg/releases/tag/v20.9.0-rc.1\">Gutenberg 20.9 RC1</a> for everyone to test out, and we’re expecting the final version to go live next week! After WordCamp Europe, I&#8217;ll catch up with Anne McCarthy to record our next Gutenberg Changelog, where we’ll chat about a bunch of stuff, including those two Gutenberg plugin releases, 20.9 and 21.0.</p>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p><img alt=\"🎙\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f399.png\" style=\"height: 1em;\" /> The latest episode <a href=\"https://gutenbergtimes.com/podcast/gutenberg-changelog-117-woocommerce-starter-theme-and-blocks/\">Gutenberg Changelog 117 – WooCommerce Starter Theme and Blocks, WordCamp Europe, and Gutenberg 20.7 and 20.8</a> I sat down with Ellen Bauer, WooCommerce product lead and discussed what she is working on, WordCamp Europe, Create Block Theme, WP-CLI, Gutenberg 20.7 and Gutenberg 20.8 releases. </p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"Ellen Bauer and Birgit Pauli-Haack recording Gutenberg Changelog 117\" class=\"wp-image-40375\" height=\"184\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2022/03/Screenshot-2025-05-10-at-12.16.57.png?resize=652%2C184&#038;ssl=1\" width=\"652\" /></figure>\n</div></div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0-p\">Plugins, Themes, and Tools for #nocode site builders and owners</h2>\n\n\n\n<p><strong>Johanne Courtright </strong>explains how <a href=\"https://groundworx.dev/gutenberg-is-a-game-changer-and-clients-actually-love-it-when-done-right/\"><strong>Gutenberg is a game-changer — and clients actually love it (when done right).</strong></a> When implemented thoughtfully, she found, the Gutenberg editor revolutionizes WordPress by empowering clients with intuitive, flexible content creation. In her experience, clients express genuine satisfaction, as Gutenberg’s block-based approach simplifies editing and design, making website management more accessible and enjoyable for non-technical users.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong>Kevin Batdorf</strong> <a href=\"https://x.com/kevinbatdorf/status/1924334824640451038\">updated</a> his plugin <a href=\"https://wordpress.org/plugins/pattern-css/\"><strong>Pattern CSS</strong></a> . It lets you add CSS scoped to a block, and recently added a floating editor as well as a global CSS editor, making it easy to add custom animations or anything. It&#8217;s parsed via Lightening CSS in WebAssembly as you type, and works well with synced patterns.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong><a href=\"https://bsky.app/profile/zodiac1978.bsky.social\">Thorsten Landsiedel</a></strong> published a plugin called &#8220;<a href=\"https://github.com/Zodiac1978/hide-in-feed\"><strong>Hide Block in RSS feed</strong>,</a>&#8221; which adds a toggle switch to block sidebars for suppressing content in RSS feeds. In his talk at WordCamp Leipzig, he noted that decorative icons/images may display differently in RSS readers. Using this block you can improve readability by suppressing specific blocks in the feeds. The <a href=\"https://github.com/Zodiac1978/hide-in-feed\">plugin is available</a> on GitHub.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong>Weston Ruter</strong>, a long-time WordPress Core committer, explains step-by step how he <a href=\"https://weston.ruter.net/2025/05/17/adding-caption-and-lightbox-to-the-featured-image-block/\"><strong>added caption and lightbox to the featured image block</strong></a>. When Weston Ruter rebuilt his site with the Twenty Twenty-Five theme, he noticed the Featured Image block lacked caption and lightbox features. Both features are available for the Image block. Ruter shared code examples on how he implemented these features in a plugin. Then he also suggested future improvements for WordPress core.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><a href=\"https://wordpress.org/plugins/wm-animations/\"><strong>WM Animations</strong></a> plugin by <strong>Widescreen Media</strong>, a company from Sweden, helps users to add entrance animations like fade-in and slide-in to core blocks. &#8220;You can select animation type and adjust duration/delay per block, directly in the block inspector. Works well with all core blocks and most custom blocks.&#8221; <a href=\"https://widescreen.media/\">Widescreen Media&#8217;s website</a> might be the best demo for this plugin.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong>Andy Fragen</strong>, core contributor and trauma surgeon, authored quite a few <a href=\"https://profiles.wordpress.org/afragen/#content-plugins\">plugins</a>. The <strong><a href=\"https://wordpress.org/plugins/oembed-gist-files/\">oEmbed for GitHub Gist</a> </strong>plugin enables writers to add code from  GitHub Gists via the Embed block to their posts. For classic editor users, you just put the URL on a new line. </p>\n\n\n<section class=\"wp-block-newsletterglue-callout undefined not-color-set\" style=\"border-color: #f9f9e5; border-radius: 22px; border-style: solid; border-width: 0; padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px; text-align: left; margin-left: 0; margin-right: 0; margin-top: 0px; margin-bottom: 0px; background-color: #f9f9e5;\">\n<p><strong> <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/\" rel=\"noreferrer noopener\" target=\"_blank\">&#8220;Keeping up with Gutenberg &#8211; Index 2025&#8221;</a> </strong><br />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: <strong><strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2020/\">2020</a> | <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2021/\">2021</a></strong> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2022/\">2022</a></strong></strong> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2023\">2023</a></strong> | <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2024/\"><strong>2024</strong></a></p>\n</section>\n\n\n<h2 class=\"wp-block-heading\" id=\"3-building-themes-for-fse-and-word-press\">Building Blocks and Tools for the Block editor</h2>\n\n\n\n<p><a href=\"https://wordpress.tv/event/wordcamp-lisboa-2025/\">Video recordings from <strong>Lisboa&#8217;s WordCamp 2025</strong></a> are already available on WordPressTV </p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://wordpress.tv/2025/05/19/wordpress-gems-for-devs-interactivity-api/\"><strong>WordPress gems for devs: Interactivity API</strong></a> with Milana Cap</li>\n\n\n\n<li><a href=\"https://wordpress.tv/2025/05/19/connecting-custom-fields-from-meta-boxes-to-blocks-and-beyond/\"><strong>Connecting custom fields: From meta boxes to blocks and beyond</strong></a> with Ryan Welcher </li>\n\n\n\n<li><a href=\"https://wordpress.tv/2025/05/19/woocommerce-checkout-block-what-you-missed/\"><strong>WooCommerce Checkout block, what you missed!</strong></a> with Nadir Seghir<br /></li>\n</ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong>Seth Rubenstein</strong>, lead engineer at Pew Research Center, <a href=\"https://x.com/SethRubenstein/status/1923426022285799842\">decided</a> to take a break from regularly scheduled work to play around with an <a href=\"https://github.com/pewresearch/wp-interactivity-api-chrome-extension\"><strong>Interactivity API (iAPI) Inspector Chrome Extension</strong></a>. This tool offers dev tools to highlight iAPI directives and context associated with a block as well as map connections between iAPI stores on a page.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https://github.com/pewresearch/wp-interactivity-api-chrome-extension\"><img alt=\"Screenshot of the Interactivity API Inspector Chrome Extension\" class=\"wp-image-40546\" height=\"264\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-23-at-15.45.53.png?resize=652%2C264&#038;ssl=1\" width=\"652\" /></a></figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong>Jonathan Bossenger</strong> has spent some time the last couple of weeks learning more about <a href=\"https://github.com/Automattic/wp-feature-api\">Feature API</a>, the <a href=\"https://github.com/Automattic/wordpress-mcp\">WordPress MCP</a> plugin and the MCP WordPress remote package. In his latest video, <a href=\"https://www.youtube.com/watch?v=PsrrTZ6Ph3I\"><strong>Are your WordPress plugins and themes ready for AI?</strong></a> he puts it all together using one of his plugins and shows the various steps:  </p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Registering Features with the Feature API Plugin</li>\n\n\n\n<li>Converting Features into Tools with MCP Plugin</li>\n\n\n\n<li>Configuring AI Tools to Use MCP Features</li>\n</ul>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div>\n\n\n<p>Once you watched the video a couple of times, it might be helpful to also read <strong>Jamie Marsland</strong>&#8216;s post on LinkedIn again:  <a href=\"https://www.linkedin.com/pulse/wordpress-sitting-goldmine-feature-api-just-dug-first-jamie-marsland-3sije/?trackingId=qVLCTVZZSniPqxIiHZRpdQ%3D%3D\"><strong>WordPress Is Sitting on a Goldmine — And the Feature API Just Dug the First Tunnel</strong></a></p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p>In this week&#8217;s live stream, <strong>Ryan Welcher</strong> also took a <a href=\"https://www.youtube.com/watch?v=HqLXvOneHHw\" rel=\"noreferrer noopener\" target=\"_blank\"><strong>A first look at the new WordPress Feature API</strong></a>. He calls the Feature API &#8220;a powerful new way of exposing WordPress functionality in a standardized, discoverable way for both server and client-side use.&#8221;</p>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div>\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-new-in-playground\">What is new in Playground?</h2>\n\n\n\n<p>Roger Williams and I spoke about my upcoming WordCamp EU workshop.&#8221; &#8220;<a href=\"https://europe.wordcamp.org/2025/session/from-zero-to-demo-mastering-wordpress-playground-blueprints/\"><em>From Zero to Demo: Mastering WordPress Playground Blueprints</em></a>&#8220;. The recording is available on YouTube <a href=\"https://www.youtube.com/watch?v=BDBZKjV3Js0\"><strong>WordPress Playground Workshop Preview with Birgit Pauli-Haack</strong></a></p>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong>Karthick Murugan</strong>, from the Multidots team,  updated documentation with everything you want to know about the current web instance: <a href=\"https://wordpress.github.io/wordpress-playground/web-instance\"><strong>WordPress Playground web instance</strong></a>. </p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p>Earlier this week, I wrote about the early version of the <a href=\"https://www.npmjs.com/package/@wp-playground/cli\">Playground CLI</a> and how to use it to test your plugin and theme in development or your blueprints locally. <a href=\"https://icodeforapurpose.com/early-version-playground-cli-testing/\"><strong>Early version Playground CLI testing</strong></a>.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p>In <a href=\"https://icodeforapurpose.com/automating-wordpress-playground-screenshots-with-node-js-and-playwright/\"><strong>Automating WordPress Playground Screenshots with Node.js and Playwright</strong></a> I shared the context and code using the JavaScript API to call a with a playwright browser instance to take a screenshot of the Playground site configured with a blueprint.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n<section class=\"wp-block-newsletterglue-callout undefined not-color-set\" style=\"border-color: #eeeeee; border-radius: 26px; border-style: solid; border-width: 0; padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px; text-align: left; margin-left: 0; margin-right: 0; margin-top: 0px; margin-bottom: 0px; background-color: #f3efe9;\">\n<p><strong><a href=\"https://gutenbergtimes.com/need-a-zip-from-master/\">Need a plugin .zip from Gutenberg&#8217;s master branch?</a></strong><br />Gutenberg Times provides daily build for testing and review. </p>\n\n\n\n<p>Now also available via <a href=\"https://playground.wordpress.net/?blueprint-url=https://gutenbergtimes.com/wp-content/uploads/2020/11/playnightly.json\">WordPress Playground</a>. There is no need for a test site locally or on a server. Have you been using it? <a href=\"mailto:pauli@gutenbergtimes.com\">Email me </a>with your experience</p>\n\n\n\n<p><img alt=\"GitHub all releases\" src=\"https://img.shields.io/github/downloads/bph/gutenberg/total?style=for-the-badge\" /></p>\n</section>\n\n\n<p class=\"has-text-align-center has-small-font-size\"><em>Questions? Suggestions? Ideas? </em><br /><em>Don&#8217;t hesitate to send <a href=\"mailto:pauli@gutenbergtimes.com\">them via email</a> or</em><br /><em> send me a message on WordPress Slack or Twitter @bph</em>.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" />\n\n\n\n<p class=\"has-text-align-center has-small-font-size\">For questions to be answered on the <a href=\"http://gutenbergtimes.com/podcast\">Gutenberg Changelog</a>, <br />send them to <a href=\"mailto:changelog@gutenbergtimes.com\">changelog@gutenbergtimes.com</a></p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n<section class=\"wp-block-newsletterglue-group\" style=\"padding-top: 10px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; margin-top: 0px; margin-bottom: 0px;\">\n<p>Featured Image: Photo by Ivan Bandura on Unsplash</p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity is-style-wide\" />\n\n\n\n<p class=\"has-text-align-left\"><strong>Don&#8217;t want to miss the next Weekend Edition? </strong></p>\n\n\n<form action=\"https://gutenbergtimes.com/feed/\" autocomplete=\"on\" class=\"wp-block-newsletterglue-form ngl-form ngl-portrait\" method=\"post\"><div class=\"ngl-form-container\"><div class=\"ngl-form-field\" style=\"margin-bottom: 25px;\"><label class=\"ngl-form-label\" for=\"ngl_email\"><br />Type in your Email address to subscribe.</label><div class=\"ngl-form-input\"><input autocomplete=\"email\" class=\"ngl-form-input-text\" id=\"ngl_email\" name=\"ngl_email\" required=\"required\" style=\"border-radius: 21px;\" type=\"email\" /></div></div><button class=\"ngl-form-button\" style=\"background-color: #005075; border-color: #005075; border-width: 1px; border-style: solid; color: #ffffff; border-radius: 21px;\" type=\"submit\">Subscribe</button><p class=\"ngl-form-text\">We hate spam, too, and won&#8217;t give your email address to anyone <br />except Mailchimp to send out our Weekend Edition</p></div><div class=\"ngl-message-overlay\"><div class=\"ngl-message-svg-wrap\"><svg fill=\"none\" height=\"24\" stroke=\"#fff\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg></div><div class=\"ngl-message-overlay-text\">Thanks for subscribing.</div></div><input id=\"ngl_list_id\" name=\"ngl_list_id\" type=\"hidden\" value=\"26f81bd8ae\" /><input id=\"ngl_double_optin\" name=\"ngl_double_optin\" type=\"hidden\" value=\"yes\" /></form>\n\n\n<hr class=\"wp-block-separator has-css-opacity is-style-wide\" />\n</section>\";s: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, 24 May 2025 09: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: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:58:\"Gravatar: Proven Branding Methods for Professional Coaches\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"http://blog.gravatar.com/?p=3184\";s:7:\"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:58:\"https://blog.gravatar.com/2025/05/23/branding-for-coaches/\";s: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:15736:\"<p>Are you looking for a way to differentiate your coaching services in a competitive online market? You&#8217;re not alone. Many coaches struggle to stand out among thousands of others offering similar services.</p>\n\n\n\n<p>Here&#8217;s the good news: <strong>Effective coach branding doesn&#8217;t require massive budgets or complex systems.</strong> Instead, success comes from focusing on a few foundational pillars: Optimizing your digital presence, promoting your services strategically, and tracking performance consistently.</p>\n\n\n\n<p>And no, you don&#8217;t need to hire expensive agencies or completely redesign your business. Small, targeted improvements to your branding can yield significant results in attracting your ideal clients.</p>\n\n\n\n<p>This guide cuts through the theory and provides practical, proven branding techniques specifically for coaches. Each strategy is designed to help you build a distinctive professional identity that resonates with potential clients and positions you as the obvious choice in your coaching niche.</p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Essential elements of a professional coaching brand</strong></h2>\n\n\n\n<p>The foundation of any successful coaching business isn&#8217;t flashy graphics or clever slogans – it&#8217;s a consistent multi-platform presence strategy. This means maintaining a unified professional identity across coaching directories, your website, social media profiles, and professional networks. Tools like <a href=\"https://gravatar.com\">Gravatar</a> can help automate this consistency, ensuring your professional image remains cohesive wherever potential clients encounter you online.</p>\n\n\n\n<p><strong>A big part of that consistency is demonstrating your expertise.</strong> Potential clients need clear evidence of your capabilities through certifications, testimonials, and client success stories prominently displayed in your professional bios and website. These serve as social proof that validates your coaching abilities to skeptical prospects.</p>\n\n\n\n<p>Video content has become a particularly powerful way to showcase expertise. According to <a href=\"https://wistia.com/learn/marketing/video-marketing-statistics\">Wistia&#8217;s 2025 State of Video Report</a>, short-form video content significantly outperforms other formats in engagement rates, with how-to videos under one minute achieving 82% viewer completion. <a href=\"https://www.instagram.com/\">Instagram</a> reels and <a href=\"https://www.tiktok.com/\">TikTok</a> tutorials offer perfect platforms to demonstrate your coaching approach in action.</p>\n\n\n\n<p>To truly stand out, develop proprietary frameworks or methodologies that distinguish your services from generic coaching approaches. This gives clients a concrete system to understand and helps position you as an innovative thinker in your field.</p>\n\n\n\n<p>On top of that, you need to take whatever time you need to identify what makes your coaching unique – your background, approach, client specialization, or results – and weave these elements into a compelling coaching story that resonates with your target audience.</p>\n\n\n\n<p>Now, let&#8217;s explore some practical ways to build these brand pillars.</p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How Gravatar powers your coaching brand identity</strong></h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"1 – Gravatar homepage\" class=\"wp-image-3187\" height=\"1298\" src=\"https://blog.gravatar.com/wp-content/uploads/2025/04/1-gravatar-new-homepage.png\" width=\"2492\" /></figure>\n\n\n\n<p>Establishing a consistent online presence is one of the biggest challenges for coaches, but thankfully, this is where <a href=\"https://gravatar.com\">Gravatar</a> steps in as a powerful brand management tool. As a &#8220;Globally Recognized Avatar,&#8221; Gravatar can become like a central identity hub that automatically syncs across thousands of platforms, eliminating the frustration of managing multiple profiles.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"2 – Ronnie Burt Gravatar profile\" class=\"wp-image-3188\" height=\"1323\" src=\"https://blog.gravatar.com/wp-content/uploads/2025/04/2-ronnie-new-gravatar-profile.png\" width=\"1755\" /></figure>\n\n\n\n<p>Think of Gravatar as your <a href=\"https://blog.gravatar.com/2024/11/08/creating-a-digital-business-card/\">digital business card</a> on steroids. It connects your professional image, bio, and credentials across coaching directories, blog comments, professional forums, and social platforms. When potential clients encounter you across different channels, they&#8217;ll recognize your consistent presence immediately, crucial for building recognition in a crowded coaching marketplace.</p>\n\n\n\n<p>The trust factor gets a significant boost with Gravatar&#8217;s verification system. Each link on your profile can display a &#8220;verified&#8221; tick, signalling authenticity to sceptical prospects. In coaching, where trust is everything, these small trust signals make a substantial difference in conversion rates.</p>\n\n\n\n<p>Your Gravatar profile can even live as a <a href=\"https://docs.gravatar.com/2024/05/23/qr-me-this-qr-me-that/\">QR code</a> in your phone&#8217;s digital wallet, making <a href=\"https://blog.gravatar.com/2024/06/16/how-to-network-at-a-conference/\">in-person networking seamless</a>. </p>\n\n\n\n<figure class=\"wp-block-image\"><img alt=\"3 – Adding a Gravatar QR code to your phone wallet \" src=\"https://lh7-rt.googleusercontent.com/docsz/AD_4nXf5MKKCpsP1BhXvYsdilJmK9Ty2TOjDVzHqlY_ikPaU8fj3Y3Fc8LuLNxrpFfbeGzcGlHQj-HEJgYheCu0ssRwG3MOFvYdql30cIUEFHjfwCv0pg977B1coL7VtyIf_7em26gSXiQ?key=sqicWRy8nfW2FmPeb7oslwrq\" /></figure>\n\n\n\n<p>Update your credentials once, and the changes reflect everywhere – saving hours of profile management while maintaining brand consistency.</p>\n\n\n\n<p>Ready to strengthen your coaching brand? <a href=\"https://gravatar.com/\">Get your free Gravatar profile</a> today and bring cohesion to your digital presence.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https://gravatar.com/connect/?gravatar_from=blog\"><img alt=\"\" class=\"wp-image-2616\" height=\"729\" src=\"https://blog.gravatar.com/wp-content/uploads/2024/12/free_profile_cta.png\" width=\"3243\" /></a></figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Building trust through verified profiles and consistent presence</strong></h3>\n\n\n\n<p>Verification is no longer optional in the coaching industry – it&#8217;s essential. When potential clients research your services, they&#8217;re looking for trust signals that verify your authenticity and expertise. Social media verification acts as a powerful trust marker in a saturated market.</p>\n\n\n\n<p><a href=\"https://www.instagram.com/\">Instagram</a> deserves special attention in your verification strategy. According to <a href=\"https://luisazhou.com/blog/instagram-for-coaches/\">research from Luisa Zhou</a>, this platform is where many coaches successfully find their highest-quality clients, with 54% of Instagram users making purchases after discovering services there. So naturally, verifying your Instagram presence should be a priority.</p>\n\n\n\n<p>Similarly, establishing verified presence on X (formerly Twitter) creates additional credibility touchpoints in your professional ecosystem.</p>\n\n\n\n<p>For coaches using newer platforms like <a href=\"https://blog.gravatar.com/2024/12/03/new-free-domains-and-bluesky-integration/\">Bluesky</a>, Gravatar offers a unique advantage – you can get a <a href=\"https://blog.gravatar.com/2025/02/06/bluesky-handle/\">custom Bluesky domain name</a> and verify it directly through Gravatar, creating an additional layer of professional credibility.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"4 – Changing the Bluesky domain to a custom one through Gravatar\" class=\"wp-image-3189\" height=\"394\" src=\"https://blog.gravatar.com/wp-content/uploads/2025/04/4-domain-updated-confirmation.png?w=660\" width=\"660\" /></figure>\n\n\n\n<p>Gravatar&#8217;s &#8220;update once, sync everywhere&#8221; system means your verified professional image automatically appears across hundreds of platforms – from WordPress blogs where you guest post to professional forums where you engage potential clients.</p>\n\n\n\n<p>Think of Gravatar as the foundation of your coaching trust architecture. It creates a central verification hub from which <a href=\"https://blog.gravatar.com/2024/12/02/how-can-you-manage-your-digital-footprint/\">all aspects of your digital footprint link back</a>, establishing a cohesive professional identity that builds client confidence at every digital touchpoint.</p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Practical strategies to promote your coaching brand</strong></h2>\n\n\n\n<p>Establishing credibility through a verified online presence remains the cornerstone of successful coach branding. Creating a verified professional presence using Gravatar across coaching platforms and professional networks provides the essential foundation upon which all other brand-building activities should build. This baseline credibility creates the trust necessary for potential clients to consider your services.</p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Position yourself as a thought leader</strong></h3>\n\n\n\n<p>To elevate beyond basic verification, position yourself as a thought leader through specialized content that directly addresses specific pain points in your coaching niche. This approach demonstrates your expertise while providing immediate value to potential clients.</p>\n\n\n\n<p>Effective thought leadership channels include:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://www.linkedin.com/\"><strong>LinkedIn</strong></a><strong> articles</strong> that dissect complex coaching challenges.</li>\n\n\n\n<li><a href=\"https://www.instagram.com/\"><strong>Instagram</strong></a><strong> carousels</strong> explaining your methodologies (these have 82% higher engagement for coaching content).</li>\n\n\n\n<li><strong>Blog posts</strong> on your website that showcase your unique perspective.</li>\n\n\n\n<li><strong>Email newsletters</strong> with actionable insights.</li>\n</ul>\n\n\n\n<p>The most successful coaches don&#8217;t create generic content – they develop material that speaks directly to their audience&#8217;s most pressing challenges, demonstrating both understanding and solution expertise.</p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Develop your signature framework</strong></h3>\n\n\n\n<p>Creating a distinctive &#8220;signature framework&#8221; dramatically separates your coaching brand from competitors while simplifying your marketing message. For example, a life coach specializing in work-life balance might develop &#8220;The Balance Blueprint&#8221; – a structured, step-by-step process clients follow to achieve harmony between career and personal priorities.</p>\n\n\n\n<p>Your signature framework accomplishes two critical objectives simultaneously:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It clarifies your methodology for potential clients.</li>\n\n\n\n<li>It creates a memorable brand element that differentiates you from generic coaching approaches.</li>\n</ul>\n\n\n\n<p>This combination builds both trust and recognition – the twin pillars of effective coach branding.</p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Forge strategic partnerships</strong></h3>\n\n\n\n<p>Explore high-value coaching partnerships with complementary service providers and industry experts. A relationship coach might partner with a financial advisor to address money conflicts in relationships, creating a more comprehensive solution while accessing a new client base.</p>\n\n\n\n<p>Additionally, seek opportunities to speak at industry conferences and events. These platforms position you as an authority while creating valuable networking opportunities with potential clients and partners who already recognize your expertise.</p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Measure your brand&#8217;s impact and reach</strong></h3>\n\n\n\n<p>Without tracking key metrics, you&#8217;re essentially operating in the dark, making decisions based on gut feeling rather than data.</p>\n\n\n\n<p><strong>Start by monitoring these fundamental metrics that directly reflect your brand&#8217;s performance:</strong></p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Track not just visitor numbers but engagement metrics like time-on-page and bounce rates.</li>\n\n\n\n<li>Measure shares, comments, and saves (not just likes).</li>\n\n\n\n<li>Monitor conversion rates from brand touchpoints to inquiries.</li>\n</ul>\n\n\n\n<p>Tools like <a href=\"https://marketingplatform.google.com/about/analytics/\">Google Analytics</a> provide comprehensive website insights, while platform-specific analytics like Instagram Insights and LinkedIn Analytics reveal how your content performs across different channels.</p>\n\n\n\n<p><strong>Still, data without action is useless.</strong> Use your metrics to continuously refine your approach:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Identify which topics generate the most engagement and double down.</li>\n\n\n\n<li>Spot underperforming channels and either optimize or reallocate resources.</li>\n\n\n\n<li>Test different content formats to determine what resonates best with your audience.</li>\n</ul>\n\n\n\n<p>When metrics show declining engagement, don&#8217;t just produce more content – produce better content that addresses the specific needs revealed in your data.</p>\n\n\n\n<p>And, once you do get the results you want, make sure you document your success stories – the most compelling brand assets are documented client transformations. Create systematic before-and-after assessments that quantify client progress:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Standardized assessment tools that measure baseline and improvement.</li>\n\n\n\n<li>Periodic progress check-ins that document incremental gains.</li>\n\n\n\n<li>Video testimonials that capture emotional and practical outcomes.</li>\n</ul>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Take your coaching brand to the next level</strong></h1>\n\n\n\n<p>Building a verified, consistent online presence using tools like Gravatar creates the essential foundation for your coaching brand. This strategic approach eliminates the fragmentation that undermines many coaches&#8217; digital presence while establishing the credibility necessary to convert prospects into clients.</p>\n\n\n\n<p>With Gravatar handling your consistent visual representation across platforms, you&#8217;re free to focus on what truly matters – delivering high-value client interactions through optimized touchpoints. Your social media engagement, website inquiries, and professional forum participation all benefit from the trust architecture you&#8217;ve established.</p>\n\n\n\n<p>To sum it up, here’s what you need for success: </p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A proprietary methodology that becomes synonymous with your name.</li>\n\n\n\n<li>Diverse content formats that appeal to different learning styles.</li>\n\n\n\n<li>Strategic partnerships that expand your reach into complementary audiences.</li>\n</ul>\n\n\n\n<p>The coaches who succeed don&#8217;t try to implement everything at once. They start with fundamentals, like<a href=\"https://gravatar.com/\"> creating a free Gravatar profile</a>, and systematically build their brand presence over time.</p>\n\n\n\n<p>Remember that brand development is a gradual, ongoing process. Each small improvement compounds, creating a professional presence that stands out in a crowded marketplace. </p>\n\n\n\n<p>Happy branding!</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https://gravatar.com/connect/?gravatar_from=blog\"><img alt=\"\" class=\"wp-image-2616\" height=\"729\" src=\"https://blog.gravatar.com/wp-content/uploads/2024/12/free_profile_cta.png\" width=\"3243\" /></a></figure>\";s: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, 23 May 2025 17:44: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:11:\"Ronnie Burt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i: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:47:\"Gravatar: What Makes a Digital Avatar Effective\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"http://blog.gravatar.com/?p=3289\";s:7:\"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:62:\"https://blog.gravatar.com/2025/05/23/what-is-a-digital-avatar/\";s: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:19145:\"<p>Fun fact: The global digital avatar market is hurtling toward a whopping<a href=\"https://www.grandviewresearch.com/industry-analysis/digital-avatar-market-report\"> <strong>$270.61 billion</strong> by 2030</a>. That’s up from just $18.19 billion in 2023.</p>\n\n\n\n<p>What began as a simple, low-quality profile picture you might put on mIRC or MySpace can now become a full-blown brand asset. The kind that drives clicks, builds trust, and boosts conversions like a charm. </p>\n\n\n\n<p><em>But…</em> not all avatars are created equal. So what separates the forgettable from the phenomenal?</p>\n\n\n\n<p>Effective avatars are <em>engagement machines,</em> and brands that get it right are seeing:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Higher user engagement across channels.</li>\n\n\n\n<li>Sharper brand recall (because yep, that tiny image sticks).</li>\n\n\n\n<li>Better conversion rates on platforms with consistent avatar use.</li>\n\n\n\n<li>Warmer, more personal user experiences that actually build trust.</li>\n</ul>\n\n\n\n<p>This is more than some passing tech phase, it’s a fundamental shift in how digital identity is experienced. As AI-powered avatars and virtual reps get smarter, businesses are tapping into a new kind of connection – fast, human, and scalable.</p>\n\n\n\n<p>In this guide, we’ll walk you through how to build and deploy avatars that <em>work</em>, from brand consistency and personalization to next-gen tools like <a href=\"https://gravatar.com\">Gravatar</a> that simplify your digital identity across the web.</p>\n\n\n\n<p>No more juggling profile pics across platforms. No more brand dissonance. With a smart avatar strategy, you update once and show up everywhere, looking exactly how you want to.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https://gravatar.com/connect/?gravatar_from=blog\"><img alt=\"\" class=\"wp-image-2616\" height=\"729\" src=\"https://blog.gravatar.com/wp-content/uploads/2024/12/free_profile_cta.png\" width=\"3243\" /></a></figure>\n\n\n\n<h2 class=\"wp-block-heading\">What makes a digital avatar effective: Definition and importance</h2>\n\n\n\n<p>Digital avatars are not just sci-fi playthings anymore. These digital doppelgängers are the new face of brands and professionals online, popping up everywhere from sales decks to marketing assets and customer chats. </p>\n\n\n\n<p>Here’s the kicker: According to <a href=\"https://pmc.ncbi.nlm.nih.gov/articles/PMC9763494/\">research from the National Institutes of Health</a>, our brains respond to avatars <em>a lot</em> like we respond to real humans. Wild, right? But also incredibly useful. Because that means every time a customer sees your avatar, they’re not just spotting a fancy graphic – they’re building a sense of connection, trust, and familiarity, just like they would with a real-life person.</p>\n\n\n\n<p>Why does that matter? Well:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Avatars act as a consistent visual cue across all your brand’s touchpoints</li>\n\n\n\n<li>They turn dry, technical info into something surprisingly human</li>\n\n\n\n<li>They make your brand <em>stick</em> in people’s minds</li>\n\n\n\n<li>And most importantly, they help you build actual emotional resonance online</li>\n</ul>\n\n\n\n<p>And it’s not just big brands getting in on the avatar action. If you’re building a personal brand, a strong digital avatar can become your secret weapon, a visual shorthand people instantly recognize in comment threads, <a href=\"https://slack.com/\">Slack</a> groups, or <a href=\"https://linkedin.com/\">LinkedIn</a> scroll-athons. </p>\n\n\n\n<p>Of course, different use-cases will call for different strategies. A corporate avatar might need to channel “professional but warm,” while a personal brand might want something that screams “it’s me!” in the best way. Meanwhile, your social avatar? Feel free to let your creativity run wild (meme energy encouraged).</p>\n\n\n\n<p>The point is, the avatar you choose should match its mission. A customer support bot? Friendly and dependable. A sales rep avatar? Confident and persuasive. </p>\n\n\n\n<p>Over the rest of this post, we’ll break down how to tailor your avatar’s personality to fit the context, so you’re always putting your best digital face forward.</p>\n\n\n\n<h3 class=\"wp-block-heading\">Types of digital avatars: From simple icons to interactive representations</h3>\n\n\n\n<p>Let’s start with the basics: The humble headshot avatar. This is your digital calling card. A clean, static image that tells the internet, <em>“Yep, it’s me.”</em> <a href=\"https://gravatar.com/\">Gravatar</a> is the OG here – a global avatar service that ensures your chosen pic pops up consistently across thousands of sites. </p>\n\n\n\n<p><a href=\"https://wordpress.org/\">WordPress</a> blogs, <a href=\"https://github.com/\">GitHub</a> repos, <a href=\"https://slack.com/\">Slack</a> chats, and plenty more. Set it once, and voilà: Instant recognizability, no matter where you roam online.</p>\n\n\n\n<p>In fact, setting up your Gravatar takes less than 5 minutes (likely the best ROI you&#8217;ll ever get in under a coffee break).</p>\n\n\n\n<p><a href=\"https://gravatar.com/profile\"><em>Set it up in five minutes</em></a><em> now, save yourself fifty profile edits later.</em></p>\n\n\n\n<p>Zooming out beyond headshots, the avatar scene gets pretty creative:</p>\n\n\n\n<p><strong>2D customizable avatars</strong> let you tweak everything from eye shape to shoe style (e.g., <a href=\"https://www.bitmoji.com/\">Bitmoji</a>). They’re quirky, fun, and surprisingly simple to build.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"2D Customizable Avatars\" class=\"wp-image-3294\" height=\"639\" src=\"https://blog.gravatar.com/wp-content/uploads/2025/05/bitmoji-avatars-1.png\" width=\"1500\" /></figure>\n\n\n\n<p><strong>3D static avatars</strong> offer depth, angles, shading, the works. They give your digital self some dimension and make your profile pic feel less…flat.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"3D Meta Avatars\" class=\"wp-image-3293\" height=\"404\" src=\"https://blog.gravatar.com/wp-content/uploads/2025/05/3dmetaavatars-1.png?w=660\" width=\"660\" /></figure>\n\n\n\n<p><br />In 2022 Meta teamed up with the NFL to enable viewers to outfit their Avatars in the colors of the two Superbowl teams</p>\n\n\n\n<p><strong>3D animated avatars</strong>? Now we’re in Pixar territory. These avatars blink, smile, nod, and generally act like they’re about to ask you how your day’s going. Perfect for adding that human-ish warmth to virtual chats.</p>\n\n\n\n<p>At the frontier, we’ve got <strong>AI-powered avatars</strong>, and <em>this</em> is where things get spicy. Platforms like <a href=\"https://www.heygen.com/\">HeyGen</a> let you build avatars that don’t just look the part – they talk it too. Natural language processing means they can chat, answer questions, and generally hold their own in a conversation without sounding like a 2005 chatbot.</p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-youtube\"></div>\n</div></figure>\n\n\n\n<p>And the tech’s only getting better. Even <a href=\"https://blog.gravatar.com/2025/05/06/build-your-ai-identity-with-gravatars-new-tool/\">Gravatar is creating AI-generated avatar tools</a>, so anyone – yes, even the design-challenged – can whip up a slick, professional avatar without breaking a sweat.</p>\n\n\n\n<p>The gap between digital you and real you is closing fast. And with these evolving tools, your online presence can be as polished, personable, or playfully weird as you want it to be.</p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>AI-powered avatars: The future of digital identity is already here</strong></h4>\n\n\n\n<p>Gravatar’s shiny <a href=\"https://blog.gravatar.com/2025/05/06/build-your-ai-identity-with-gravatars-new-tool/\">new AI Profile Builder</a>, launched in May 2025, is leading the charge to become the new face (quite literally) of digital identity. And with users saying they feel <a href=\"https://www.emerald.com/insight/content/doi/10.1108/jrim-07-2024-0344/full/html\"><em>more emotionally connected</em> to brands using personalized avatar</a> interactions over the usual click-and-type interfaces, this <em>isn’t</em> just for show.</p>\n\n\n\n<p>Tools like Gravatar’s AI Profile Builder allow you to build smart, secure avatars that actually <em>do something</em>.</p>\n\n\n\n<p>These AI avatars adapt based on where you are and who you’re talking to. Drop into a professional thread? Your avatar turns on the polish. Chiming in on a casual forum? It relaxes the tone. All without you lifting a finger.</p>\n\n\n\n<p>For businesses, this opens up a goldmine: Deeper customer engagement, zero need for juggling multiple digital personas, and bulletproof brand consistency, without compromising on privacy.</p>\n\n\n\n<p>We’re not just putting an AI face on your profile. We’re building a secure, intelligent bridge between your real self and your digital one – one that works across thousands of platforms.</p>\n\n\n\n<p>This means you get to nail that tricky balance between personalization and privacy. </p>\n\n\n\n<p>End result: A smart, responsive avatar that feels genuinely “you”, without handing over your life story to the algorithm gods.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Digital avatars in business: Strategic applications that drive results</h2>\n\n\n\n<p>When businesses keep their avatars consistent across platforms, they create that magical “ah yes, I know you” moment. It&#8217;s instant visual recognition that cements brand identity and reassures your audience they&#8217;re in the right place, whether they’re browsing your website, stalking your socials, or firing off a support ticket.</p>\n\n\n\n<p>And it’s not just about looking slick. A <a href=\"https://centaur.reading.ac.uk/119012/\">2024 University of Reading study</a> showed a significant jump in user interactions when brands used culturally tuned digital avatars in international campaigns. </p>\n\n\n\n<p>Turns out people respond better when your brand feels familiar and relatable, and not like a tourist fumbling through Google Translate.</p>\n\n\n\n<p>But avatars aren’t just for marketing. They’re transforming customer service, too. Virtual assistants with avatar interfaces spark more engagement than plain old text bots. Turns out, people prefer chatting with a “someone” rather than a “something.”</p>\n\n\n\n<p>Case in point: <strong>Lemonade Insurance</strong>.</p>\n\n\n\n<p>Their claims assistant, Jim (an AI avatar), <a href=\"https://aimagazine.com/articles/lemonade-sets-world-record-with-2-second-ai-insurance-claim\">processes requests in <em>literal</em> seconds</a>. Customers now trust it more than traditional reps, and it’s not just about the speed – being presented with a friendly, familiar face turns a cold system into a warm interaction.</p>\n\n\n\n<p>The end result? Happier users who stick around longer and actually enjoy the convo.</p>\n\n\n\n<p>Now, for the pros in the room: Enter <a href=\"https://gravatar.com/\"><em>Gravatar</em></a>.</p>\n\n\n\n<p>Whether you’re replying to a blog comment, debugging on Stack Overflow, or posting in a Slack channel, <a href=\"https://gravatar.com/\">Gravatar</a> has you covered.</p>\n\n\n\n<p>Unlike avatars that change depending on the platform (and leave your brand scattered like confetti), Gravatar keeps everything tidy and cohesive. Set it up once, and your professional avatar just <em>shows up</em> across thousands of platforms without you lifting a finger. It’s recognition on autopilot.</p>\n\n\n\n<p>And for businesses building community platforms? The Gravatar API is your new best friend. It lets users show up with their avatars already in tow – no need for endless image uploads or awkward “who’s who” moments. Just seamless, identity-based connection right out of the box.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementation guide: Creating the right avatar solution for your needs</h2>\n\n\n\n<p>Before you go charging into avatar creation mode, pause. Breathe. Ask yourself: <strong>What do I actually need this avatar to </strong><strong><em>do</em></strong><strong>?</strong></p>\n\n\n\n<p>Because the best avatar isn’t just pretty, it’s <em>purpose-built</em>. And the right solution depends entirely on your goals:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Brand consistency</strong> – Need a single, recognizable face across all your digital turf?</li>\n\n\n\n<li><strong>Personal branding</strong> – Want to show up as a thought leader or expert, loud and clear?</li>\n\n\n\n<li><strong>Customer interaction</strong> – Planning to use avatars in live support or sales scenarios?</li>\n\n\n\n<li><strong>Immersive engagement</strong> – Building an experience that needs personality, emotion, and <em>connection</em>?</li>\n</ul>\n\n\n\n<p>Each goal unlocks a different avatar approach, so pick your strategy before picking your style.</p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Type of avatar</strong></td><td><strong>Purpose </strong></td><td><strong>Examples</strong></td></tr><tr><td>Static</td><td>Consistent visual branding; establish familiarity and recognition.</td><td>Company logo icon, profile headshot, illustrated character used across web pages and email signatures</td></tr><tr><td>Interactive</td><td>Real-time, personalized customer interaction</td><td>AI chatbot with animated face, live avatar-based support agent</td></tr></tbody></table></figure>\n\n\n\n<p>No matter what your preferred avatar is, if you&#8217;re building a full-blown avatar ecosystem (i.e., membership platforms, technical communities, enterprise apps), then you’ll want to get serious about your tech stack.</p>\n\n\n\n<p>Here’s what to factor in:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Storage</strong> for high-res avatar files</li>\n\n\n\n<li><strong>Content delivery networks (CDNs)</strong> for global speed</li>\n\n\n\n<li><strong>Sync systems</strong> to keep identities aligned everywhere</li>\n\n\n\n<li><strong>API integrations</strong> with your user databases</li>\n</ul>\n\n\n\n<p>This is where Gravatar really shines: Its email-based ID system handles identity, and the REST API makes delivery dead simple. Just hash an email, hit the avatar or profile endpoint, and Gravatar returns consistent, customizable visuals – no storage, no syncing, no fuss. </p>\n\n\n\n<p>Developers get fast, cacheable responses, optional profile data, and fallback image controls – all without bloating your backend or reinventing the wheel.</p>\n\n\n\n<p>Bottom line: Your perfect avatar setup depends on what you&#8217;re building, how techy you&#8217;re feeling, and the kind of connection you want with your audience. Choose wisely, and let your digital self do the heavy lifting.</p>\n\n\n\n<h3 class=\"wp-block-heading\">Digital avatar design best practices</h3>\n\n\n\n<p>When it comes to designing your digital avatar, you want it to be instantly recognizable, reliably familiar, and – above all – consistent wherever it shows up. That visual déjà vu is what builds trust. So, a few pointers:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Always, always go for crisp, high-quality visuals</strong>. If your avatar looks like it was snapped through a potato or cropped with garden shears, it sends a subtle message that details aren’t your strong suit. Not ideal when you&#8217;re aiming to be taken seriously.</li>\n\n\n\n<li><strong>Make sure your avatar scales like a pro</strong>. Whether it’s a teeny-tiny dot in a comment thread or proudly displayed on your profile, it should stay sharp and identifiable. So skip the intricacies – those fine details tend to vanish faster than free Wi-Fi at a cheap café.</li>\n\n\n\n<li><strong>Test everything</strong>. Your avatar might look stunning on your 27-inch monitor, but end up awkwardly cropped on someone’s smartphone. Preview it everywhere before you commit.</li>\n</ul>\n\n\n\n<p>One last pro tip: Set up a <a href=\"https://gravatar.com/\">Gravatar</a> profile. It’s the easy button for keeping your avatar synced across WordPress, Slack, and a ton of other platforms. Update it once, and your whole digital universe stays in step. Clean, consistent, and credible.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Transform your online presence with Gravatar: Start creating your professional digital identity today</h2>\n\n\n\n<p>Tired of uploading your headshot <em>again</em> for the millionth platform? Gravatar is the slick, savvy avatar service that makes you look polished across the internet without breaking a sweat (or opening Photoshop).</p>\n\n\n\n<p>Set up your Gravatar once, and that single image becomes your visual passport across the internet, including websites like <a href=\"https://wordpress.com/\"><strong>WordPress</strong><strong>, </strong></a><a href=\"https://github.com/\"><strong>GitHub</strong><strong>, </strong></a><a href=\"https://slack.com/\"><strong>Slack</strong><strong>, </strong></a><a href=\"https://www.figma.com/\"><strong>Figma</strong><strong>, </strong></a><a href=\"https://mailchimp.com/\"><strong>Mailchimp</strong><strong>, </strong></a><a href=\"https://stackoverflow.com/\"><strong>Stack Overflow</strong><strong>, </strong></a><a href=\"https://openai.com/\"><strong>OpenAI</strong><strong>, </strong></a><a href=\"https://www.atlassian.com/\"><strong>Atlassian</strong><strong>, </strong></a><a href=\"https://www.coinbase.com/\"><strong>Coinbase</strong></a>, and more! </p>\n\n\n\n<p>Whether you’re commenting, collaborating, or contributing, your avatar shows up instantly, building recognition and credibility with every interaction.</p>\n\n\n\n<p>And if you’re creating a platform where identity matters, Gravatar’s APIs are a goldmine:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://docs.gravatar.com/api/avatars/images/\"><strong>Avatar API</strong></a> – Automatically pulls user avatars so when they register on your website, they don&#8217;t have to upload a new profile pic – instant recognition and zero setup friction.<br /></li>\n\n\n\n<li><a href=\"https://blog.gravatar.com/2024/06/03/profiles-as-a-service/\"><strong>Profiles-as-a-Service API</strong></a> – Pulls bios, links, and other profile data <a href=\"https://blog.gravatar.com/2024/11/07/website-personalization-tools/\">directly from Gravatar</a>, streamlining onboarding and slashing form fatigue.</li>\n</ul>\n\n\n\n<p>Faster dev time, smoother UX, and more trust from day one.</p>\n\n\n\n<p>Oh, and did we mention? <strong>It’s totally free</strong>. No fees, no upsells, no “pro” plan with features locked behind a paywall. Gravatar is used by millions of professionals around the world, and you can join them without spending a penny.</p>\n\n\n\n<p>Just register and sit back as your avatar quietly does its thing, building trust, recognition, and brand alignment across the web.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https://gravatar.com/connect/?gravatar_from=blog\"><img alt=\"\" class=\"wp-image-2616\" height=\"729\" src=\"https://blog.gravatar.com/wp-content/uploads/2024/12/free_profile_cta.png\" width=\"3243\" /></a></figure>\";s: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, 23 May 2025 17:42:01 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:11:\"Ronnie Burt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i: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:67:\"Do The Woo Community: Do the Woo is Sponsoring WordCamp Europe 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=97385\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:71:\"https://dothewoo.io/blog/do-the-woo-is-sponsoring-wordcamp-europe-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:108:\"We\'re exciting to sponsor WordCamp Europe 2025 again. Come by our booth and join the community conversatoin.\";s: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, 23 May 2025 10:02: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:8:\"Bob Dunn\";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:103:\"Felix Arntz: Speculative Loading, or A Brief History of Landing a Performance Feature in WordPress Core\";s:7:\"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:30:\"https://felix-arntz.me/?p=2094\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"https://felix-arntz.me/blog/speculative-loading-history-performance-feature-in-wordpress-core/\";s: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:23926:\"<p>Two years ago today, on May 22, 2023, I opened an <a href=\"https://github.com/WordPress/performance/pull/733\">experimental pull request</a> for a new module in the <a href=\"https://wordpress.org/plugins/performance-lab/\">Performance Lab plugin</a>. That little experiment was the very first step on a long road that ultimately led to the &#8220;Speculative Loading&#8221; feature landing in WordPress 6.8 last month (April 2025).</p>\n\n\n\n<p>For those unfamiliar, the Speculative Loading feature enhances performance by speculatively loading pages a user is likely to visit next, which can make navigation feel almost instantaneous. If you want to dive into the technical nitty-gritty, I recommend checking out the <a href=\"https://make.wordpress.org/core/2025/03/06/speculative-loading-in-6-8/\" rel=\"noreferrer noopener\" target=\"_blank\">&#8220;dev note&#8221; post on Make WordPress Core</a>.</p>\n\n\n\n<p>This post, however, isn&#8217;t about the <em>what</em> or <em>how</em> of the feature itself. Instead, I want to pull back the curtain and share the story <em>behind</em> the feature—the milestones, the discussions, and the collaborative effort that took it from a spark of an idea to a reality for millions of WordPress sites. The impact is considerable even for the entire web. Keep reading to the end for concrete numbers. 👇</p>\n\n\n\n<span id=\"more-2094\"></span>\n\n\n\n<h2 class=\"wp-block-heading\">The Spark: An Intriguing Browser API</h2>\n\n\n\n<p>It all began on April 20, 2023, when an internal Google email thread about preloading techniques landed in our team&#8217;s inbox. Part of that thread was a <a href=\"https://docs.google.com/presentation/d/1GK92nCORW5vKd7LgGtTsgy35eqTV7P71l05pHsni8ok/edit?authuser=1\" rel=\"noreferrer noopener\" target=\"_blank\">slide deck</a> for an upcoming <a href=\"https://www.w3.org/2023/09/TPAC/\">TPAC 2023</a> presentation by <a href=\"https://domenic.me/\">Domenic Denicola</a> and <a href=\"https://www.jeremyroman.com/\">Jeremy Roman</a>, who were deeply involved in a new browser-level API called Speculation Rules API.</p>\n\n\n\n<p>Learning about this API, I was immediately excited. The potential performance benefits for the web, including for WordPress, seemed enormous. What particularly caught my eye were &#8220;document-level rules&#8221;, which went beyond loading specific URLs to opting in to loading entire URL patterns (as detailed later in <a href=\"https://developer.chrome.com/blog/speculation-rules-improvements\" rel=\"noreferrer noopener\" target=\"_blank\">this Chrome developers blog post</a>). At that time, this aspect of the API was truly cutting-edge. It required Chrome 113 (which was just about to be released on April 26, 2023) and, crucially, opting into a <a href=\"https://developer.chrome.com/docs/web-platform/origin-trials\">Chrome origin trial</a> because it was such an early feature. Naturally, I signed up straight away.</p>\n\n\n\n<h2 class=\"wp-block-heading\">First Steps: Pull Request for an Experimental Module</h2>\n\n\n\n<p>A few weeks of mulling it over passed, and then on May 19, 2023, I finally decided to dive in and explore how this API could work within WordPress. This led to the creation of that first <a href=\"https://github.com/WordPress/performance/pull/733\" rel=\"noreferrer noopener\" target=\"_blank\">experimental pull request</a> three days later, on May 22nd.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot of the initial GitHub pull request, showing the original description for when it had just been started as an experiment: &quot;The Speculation Rules API is in its early proposal stages and only available in Chrome 108 or newer. The full set of features however, which are needed for this module to work, are only available via origin trial in Chrome 113 or newer. [...]&quot;\" class=\"wp-image-2104\" height=\"593\" src=\"https://felix-arntz.me/wp-content/uploads/2025/05/original-speculation-rules-pull-request-1024x593.webp\" width=\"1024\" /><figcaption class=\"wp-element-caption\">Screenshot of the initial GitHub pull request, showing the original description for when it had just been started as an experiment</figcaption></figure>\n\n\n\n<p>I shared this initial exploration both with my colleagues at Google who were working on the browser API itself and with the broader WordPress Performance Team. The idea was met with a good deal of curiosity and excitement, though everyone acknowledged its experimental nature. The browser API was still very young, and its reliance on an origin trial meant it wasn&#8217;t something we could roll out widely.</p>\n\n\n\n<p>The feedback on the pull request was super helpful, coming from both the Google side and WordPress contributors. We got the pull request into a pretty decent shape so that it could in principle be added to Performance Lab, but it remained an exploration. The WordPress Performance Team had many other priorities, and as long as the core browser functionality was locked behind an origin trial, it didn&#8217;t make sense to push too hard on a plugin that very few could actually use.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Gaining Momentum: Browser API Maturation</h2>\n\n\n\n<p>Time marched on, and then in early November 2023, we received some exciting news: the document-level rules for the Speculation Rules API were slated to become publicly available, no origin trial needed, with the release of Chrome 121 on January 17, 2024.</p>\n\n\n\n<p>This was a significant development. Around the same time, Chrome had also <a href=\"https://developer.chrome.com/docs/devtools/application/debugging-speculation-rules\" rel=\"noreferrer noopener\" target=\"_blank\">introduced DevTools features</a> to help debug speculation rules, and more comprehensive documentation was starting to appear, including on <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API\" rel=\"noreferrer noopener\" target=\"_blank\">MDN</a>.</p>\n\n\n\n<p>This news was the catalyst to get serious about the dormant pull request. I revisited it, updated it to align with the latest WordPress Core changes that had happened in the meantime, and began polishing it towards a Minimum Viable Product (MVP).</p>\n\n\n\n<p>On November 20, 2023, I created a new feature branch for the prospective &#8220;Speculation Rules&#8221; module within the Performance Lab plugin. We opted for a feature branch because:</p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>We needed to ensure that even if the initial PR was merged, the module wouldn&#8217;t be released until the browser API was widely available without the origin trial.</li>\n\n\n\n<li>We anticipated a few follow-up pull requests to build out the full MVP.</li>\n</ol>\n\n\n\n<p>Following further discussions with fellow WordPress Performance Team contributors, I formalized the idea by opening a <a href=\"https://github.com/WordPress/performance/issues/897\" rel=\"noreferrer noopener\" target=\"_blank\">module proposal issue</a> on December 5, 2023. This provided a comprehensive overview of the feature and its intended scope.</p>\n\n\n\n<h2 class=\"wp-block-heading\">First Release of the Plugin</h2>\n\n\n\n<p>Things started moving quickly then. That <a href=\"https://github.com/WordPress/performance/pull/733\" rel=\"noreferrer noopener\" target=\"_blank\">initial pull request</a>, which had evolved from an experiment to a serious feature implementation, was finally merged on December 15, 2023! I immediately opened a <a href=\"https://github.com/WordPress/performance/issues/908\" rel=\"noreferrer noopener\" target=\"_blank\">follow-up issue</a> to track the remaining tasks before our first public release.</p>\n\n\n\n<p>A few relatively straightforward follow-up pull requests (<a href=\"https://github.com/WordPress/performance/pull/938\" rel=\"noreferrer noopener\" target=\"_blank\">#938</a>, <a href=\"https://github.com/WordPress/performance/pull/939\" rel=\"noreferrer noopener\" target=\"_blank\">#939</a>, <a href=\"https://github.com/WordPress/performance/pull/940\" rel=\"noreferrer noopener\" target=\"_blank\">#940</a>) were implemented and merged by mid-January 2024. Concurrently, the WordPress Performance Team was finalizing its annual roadmap, and &#8220;speculative prefetching and prerendering&#8221; (as we often called it then) earned its place as a priority project. You can see it listed on the <a href=\"https://make.wordpress.org/performance/roadmap-2024/#:~:text=Adding%20support%20for%20speculative%20prerendering%20and%20prefetching%20for%20near%2Dinstance%20page%20loads\" rel=\"noreferrer noopener\" target=\"_blank\">2024 roadmap here</a>.</p>\n\n\n\n<p>Meanwhile, a significant holistic discussion had unfolded regarding the structure of the Performance Lab plugin. The decision was made to decouple its modules into individual, standalone plugins. Performance Lab would continue as an optional central orchestrator, but users could also install specific performance features independently. This required a migration effort of the existing modules into plugin shape. I opened a <a href=\"https://github.com/WordPress/performance/pull/946\" rel=\"noreferrer noopener\" target=\"_blank\">pull request (#946)</a> on January 17, 2024, to transition the Speculation Rules module into its own plugin. On that very same day, we submitted this nearly complete plugin to the WordPress plugin directory.</p>\n\n\n\n<p>The review process by the WordPress plugin team was incredibly swift, and the plugin was approved a day later (a huge thank you to them!). While the migration <a href=\"https://github.com/WordPress/performance/pull/946\">pull request (#946)</a> hadn&#8217;t technically been merged yet, all the core code was complete and approved. Therefore we decided to push the release so users could start testing almost immediately after Chrome 121 had just made the browser API widely available. Another day later, on January 19, 2024, the <a href=\"https://wordpress.org/plugins/speculation-rules/#developers\" rel=\"noreferrer noopener\" target=\"_blank\">1.0.0 version of the Speculation Rules plugin launched on WordPress.org</a>. This was a major milestone. Despite that, we kept promotion low-key initially, as a few more enhancements were planned.</p>\n\n\n\n<p>On a personal note, just a few days later, on January 24, 2024, I experienced an even more significant milestone: I became a dad! 👶 As such, I went AFK for a while, enjoying this precious time with my new family. Thankfully, the Speculation Rules plugin was in the capable hands of my teammates at Google and the other WordPress Performance Team contributors – a special shoutout to <a href=\"https://weston.ruter.net/\">Weston Ruter</a>, who has been instrumental in polishing and helping shepherd the feature all the way until stable.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Introducing &#8220;Speculative Loading&#8221;: Promotion and Gaining Traction</h2>\n\n\n\n<p>On February 16, 2024, version 1.0.1 of the Speculation Rules plugin was released with some bug fixes. Perhaps more importantly, this coincided with the Performance Lab 2.9.0 release, which officially added our plugin to its list of associated plugins. This significantly broadened its promotion due to Performance Lab&#8217;s widespread adoption.</p>\n\n\n\n<p>When I returned from my initial parental leave about ten days later, the Speculation Rules plugin was already active on over 500 WordPress sites! Not a massive number in the grand scheme of WordPress, but impressive for a plugin barely a month old.</p>\n\n\n\n<p>Over the following months, we continued to polish the plugin, shipping further enhancements and bug fixes, and promoting it more widely. During this period, the WordPress Performance Team undertook a project to revise plugin names, aiming for clarity by focusing on user-facing benefits rather than underlying technologies. As part of this initiative, the &#8220;Speculation Rules&#8221; plugin was renamed to the &#8220;Speculative Loading&#8221; plugin (see the <a href=\"https://github.com/WordPress/performance/pull/1101\" rel=\"noreferrer noopener\" target=\"_blank\">renaming pull request #1101</a>).</p>\n\n\n\n<p>Following these enhancements, the new name, the maturation of the browser API, and encouraging feedback from other browser vendors (see Mozilla&#8217;s <a href=\"https://github.com/mozilla/standards-positions/issues/620\" rel=\"noreferrer noopener\" target=\"_blank\">standards position</a> and WebKit&#8217;s <a href=\"https://github.com/WebKit/standards-positions/issues/54\" rel=\"noreferrer noopener\" target=\"_blank\">standards position</a>), I collaborated with other contributors to publish a <a href=\"https://make.wordpress.org/core/2024/04/09/speculative-loading-in-wordpress/\" rel=\"noreferrer noopener\" target=\"_blank\">Make WordPress Core blog post</a> on April 9, 2024. This shared the project more broadly with the WordPress developer community.</p>\n\n\n\n<p>An important decision made early in the plugin’s development was to default to prerendering with &#8220;moderate&#8221; eagerness. This is a more &#8220;aggressive&#8221; setting (offering better performance but potentially more resource-intensive) than what we ultimately shipped in WordPress 6.8. It was a deliberate choice for the plugin, as it allowed us to gather feedback on a more impactful version of the feature from a performance perspective. For WordPress Core, however, we would later opt for a more conservative default (prefetching with &#8220;conservative&#8221; eagerness) to ensure resourcefulness at scale.</p>\n\n\n\n<h2 class=\"wp-block-heading\">The Road to Core: Gathering Evidence and Formal Proposal</h2>\n\n\n\n<p>Both the Speculative Loading plugin and the underlying Speculation Rules browser API continued to gain traction. Six months after that Make Core post:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The plugin had amassed over 40,000 active installations and maintained exclusively 5-star ratings on the WordPress plugin directory.</li>\n\n\n\n<li>Cloudflare <a href=\"https://blog.cloudflare.com/introducing-speed-brain/\" rel=\"noreferrer noopener\" target=\"_blank\">enabled speculative loading for their users</a>, reporting a &#8220;reduction in LCP of 45% on successful prefetches.&#8221;</li>\n\n\n\n<li>Further partnership experiments between Google and companies like Shopify continued to demonstrate the feature&#8217;s positive impact on load times and user experience.</li>\n\n\n\n<li>The Speculation Rules API itself was already being used on <a href=\"https://chromestatus.com/metrics/feature/timeline/popularity/3932\" rel=\"noreferrer noopener\" target=\"_blank\">over 8% of Chrome page loads</a>.</li>\n</ul>\n\n\n\n<p>With such positive signals, even at a considerable scale, it felt like the right time to formally propose the feature for inclusion in WordPress Core. On November 21, 2024, I opened a <a href=\"https://core.trac.wordpress.org/ticket/62503\" rel=\"noreferrer noopener\" target=\"_blank\">WordPress Trac ticket (#62503)</a> proposing the feature for WordPress 6.8. Alongside it, I submitted a <a href=\"https://github.com/WordPress/wordpress-develop/pull/7860\" rel=\"noreferrer noopener\" target=\"_blank\">WordPress Core pull request (#7860)</a> with the proposed code, which was largely a port of the existing plugin.</p>\n\n\n\n<p>As mentioned, while the plugin used &#8220;prerender&#8221; with &#8220;moderate&#8221; eagerness, we opted for a more conservative approach (literally!) for Core, using only &#8220;prefetch&#8221; with &#8220;conservative&#8221; eagerness. At the massive scale of WordPress (impacting over 40% of the web), this was a safer starting point. The implementation, however, was designed to potentially allow for adjustments in the future as the browser API evolves or as confidence in other configurations grows.</p>\n\n\n\n<h2 class=\"wp-block-heading\">The Final Push: Community Feedback and Commitment</h2>\n\n\n\n<p>For the next two months, the Trac ticket and pull request primarily saw feedback from contributors already involved in the development. While valuable, a feature of this significance ideally receives broader input from the wider WordPress Core community, including experienced long-term contributors and committers. In mid-January 2025, we began to more actively solicit this feedback, raising the ticket during the weekly WordPress Core &#8220;dev chat&#8221; and eventually bumping its priority on Trac.</p>\n\n\n\n<p>Aside: It&#8217;s not uncommon for Trac tickets to only receive broader feedback later in the process. This isn&#8217;t ideal, but it&#8217;s often a reality given the limited resources and the sheer volume of ongoing development efforts. Reviewing a notable feature thoroughly takes time, which is a scarce commodity for many contributors. If you want to help, consider <a href=\"https://wordpress.org/five-for-the-future/\">sponsoring WordPress development</a>.</p>\n\n\n\n<p>By early February, we started seeing more engagement from other long-term contributors. This sparked some excellent discussions on the Trac ticket, the pull request, and synchronously on Slack. Some conversations worth highlighting include <a href=\"https://wordpress.slack.com/archives/C02RQBWTW/p1738344132077399\" rel=\"noreferrer noopener\" target=\"_blank\">this Slack discussion</a>, <a href=\"https://core.trac.wordpress.org/ticket/62503#comment:15\" rel=\"noreferrer noopener\" target=\"_blank\">this Trac ticket discussion</a>, and <a href=\"https://github.com/WordPress/wordpress-develop/pull/7860#issuecomment-2641175007\" rel=\"noreferrer noopener\" target=\"_blank\">this GitHub pull request discussion</a>.</p>\n\n\n\n<p>Both general considerations and specific technical details were debated, and much of the final fine-tuning of the implementation occurred during this &#8220;final sprint&#8221;, which took about three weeks. Eventually, the pull request garnered several approvals, and a consensus emerged that the feature was ready for WordPress Core.</p>\n\n\n\n<p>And so, on February 18, 2025, I <a href=\"https://core.trac.wordpress.org/changeset/59837\" rel=\"noreferrer noopener\" target=\"_blank\">committed the feature to WordPress Core</a>! This was a good two weeks before the WordPress 6.8 Beta 1 release was due – a critical deadline, as new features and enhancements must be committed before the first Beta of a release cycle.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Post-Commit and Launch</h2>\n\n\n\n<p>A small follow-up fix was committed a few days later, but overall, the period following the commit was quiet – exactly what you hope for! It indicated no significant issues with the feature, especially during the Beta and Release Candidate (RC) periods.</p>\n\n\n\n<p>While monitoring post-commit feedback, I began working on the &#8220;dev note&#8221; – the official Make WordPress Core blog post that describes a new Core feature for developers, explaining how it works and how it can be customized. Writing such a post is a crucial step to inform the WordPress developer ecosystem about upcoming changes, for example allowing plugin developers to prepare their plugins. Several other WordPress Core Performance Team members collaborated on it, and the <a href=\"https://make.wordpress.org/core/2025/03/06/speculative-loading-in-6-8/\" rel=\"noreferrer noopener\" target=\"_blank\">post was published on March 6, 2025</a>. This is likely the post many of you read if you were already familiar with Speculative Loading in WordPress 6.8.</p>\n\n\n\n<p>And that was it! Nearly two years after the work had started, the Speculative Loading feature officially launched as part of WordPress 6.8 on April 15, 2025.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Speculative loading feature as highlighted on the About page of WordPress 6.8: &quot;Near-instant page loads, thanks to Speculative Loading&quot;\" class=\"wp-image-2105\" height=\"489\" src=\"https://felix-arntz.me/wp-content/uploads/2025/05/speculative-loading-feature-wordpress-6-8-1024x489.webp\" width=\"1024\" /><figcaption class=\"wp-element-caption\">Speculative loading feature as highlighted on the About page of WordPress 6.8</figcaption></figure>\n\n\n\n<h2 class=\"wp-block-heading\">Post-Launch: Impact Metrics time!</h2>\n\n\n\n<p>Now that the feature is out there, the final step is to assess its real-world impact. It is great to see the adoption impact already:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>From March 2025 to May 2025, usage of the Speculation Rules API for all navigations (individual page loads) across the web grew from 8.47% to 10.81%, a relative increase of <strong>27.63%</strong>!</li>\n\n\n\n<li>From March 2025 to May 2025, usage of the Speculation Rules API for all origins (entire websites) across the web grew from 0.39% to 18.09%, a relative increase of <strong>4538.46%</strong>! 🤯</li>\n</ul>\n\n\n\n<p><em>Data based on public Chrome datasets. <a href=\"https://colab.research.google.com/drive/1krQWvjK2Zyl01vqcxTM9J1fOQN29gElq\">Please refer to this Colab for the full data.</a></em></p>\n\n\n\n<p>The data strongly suggests that the majority of the feature usage growth across the overall web comes from the WordPress 6.8 launch, because of WordPress&#8217;s large scale and the fact that in the preceding months the feature usage growth was more or less flat. So that&#8217;s an amazing win and goes to show once again the impact that WordPress has on the entire web!</p>\n\n\n\n<p>That said, usage is only a secondary metric. For a performance feature like speculative loading, we ideally want to get an idea on the <em>performance</em> impact of the feature, in particular on LCP. For this, we will need to wait for May data for the <a href=\"https://developer.chrome.com/docs/crux\">Chrome User Experience Report (CrUX)</a>, which is slated to become available in mind-June. I am looking forward to taking a closer look.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Looking Back</h2>\n\n\n\n<p>While the technical behavior of speculative loading is becoming more and more well-documented, with this article I wanted to share the story behind how it all came to be. If you have any questions, please feel free to ask them in the comments!</p>\n\n\n\n<p>If you are interested in the speculative loading feature&#8217;s technical aspects, I recently recorded a <a href=\"https://wptavern.com/podcast\">WP Tavern podcast</a> episode with a technical deep dive, which should air very soon.</p>\n\n\n\n<p>The journey of a WordPress Core feature can be a long and winding road. While the focused development time for the Core commit might appear to be just a couple of months, it&#8217;s often preceded by a much longer period of exploration, experimentation, plugin development, and community feedback.</p>\n\n\n\n<p>To recap the key milestones for Speculative Loading:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>April 2023:</strong> Initial &#8220;discovery&#8221; of the Speculation Rules API.</li>\n\n\n\n<li><strong>May 2023:</strong> First experimental Performance Lab module PR.</li>\n\n\n\n<li><strong>November 2023:</strong> News of broader browser API availability; serious development resumes.</li>\n\n\n\n<li><strong>January 2024:</strong> Standalone &#8220;Speculation Rules&#8221; plugin launched on WordPress.org.</li>\n\n\n\n<li><strong>Spring-Summer 2024:</strong> Plugin renaming to &#8220;Speculative Loading,&#8221; and broader promotion, community outreach, and usage growth.</li>\n\n\n\n<li><strong>November 2024:</strong> Formal proposal for WordPress Core inclusion.</li>\n\n\n\n<li><strong>February 2025:</strong> Feature committed to WordPress Core for version 6.8.</li>\n\n\n\n<li><strong>April 2025:</strong> WordPress 6.8 released with Speculative Loading.</li>\n</ul>\n\n\n\n<p>Today, exactly two years after that first tentative pull request, it’s incredibly rewarding to look back at this journey and celebrate the successful launch of a feature that I believe will make a real difference to WordPress performance.</p>\n<p>The post <a href=\"https://felix-arntz.me/blog/speculative-loading-history-performance-feature-in-wordpress-core/\">Speculative Loading, or A Brief History of Landing a Performance Feature in WordPress Core</a> appeared first on <a href=\"https://felix-arntz.me\">felix-arntz.me</a>.</p>\";s: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, 22 May 2025 13:10:27 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"Felix\";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:83:\"Do The Woo Community: WordCamp Europe 2025 Organizers Share Insights and Excitement\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=97345\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:82:\"https://dothewoo.io/wordcamp-europe-2025-organizers-share-insights-and-excitement/\";s: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:231:\"This special episode of WordPress Event Talk is all about WordCamp Europe 2025 in Basel, Switzerland, highlighting organizers\' insights on inclusivity, accessibility, childcare, workshops, and volunteer opportunities for attendees.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 22 May 2025 08:44: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:8:\"Bob Dunn\";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:87:\"WPTavern: #170 – Chris Reynolds on WordPress and Drupal: Differences and Similarities\";s:7:\"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=195929\";s:7:\"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:100:\"https://wptavern.com/podcast/170-chris-reynolds-on-wordpress-and-drupal-differences-and-similarities\";s: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:58645:\"<details>Transcript<div>\n<p>[00:00:19] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.</p>\n\n\n\n<p>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, what WordPress and Drupal have in common.</p>\n\n\n\n<p>If you&#8217;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.</p>\n\n\n\n<p>If you have a topic that you&#8217;d like us to feature on the podcast, I&#8217;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.</p>\n\n\n\n<p>So on the podcast today we have Chris Reynolds. Chris is a developer advocate at Pantheon, where he brings nearly 20 years of experience in the WordPress community, as well as deep involvement with Drupal and open source technology at large. Prior to his advocacy role, he worked at some of the top WordPress agencies like Human Made and Web Dev Studios. He&#8217;s been active at events like DrupalCon, PressConf, and Word Camps.</p>\n\n\n\n<p>In this episode we set aside the usual WordPress only focus, and turn our attention to two CMSs, WordPress and Drupal. What makes them tick, where they excel and where they might have something to learn from each other.</p>\n\n\n\n<p>Chris draws on his unique perspective working closely with both platforms as Pantheon is one of the few hosts with a 50 50 split between WordPress and Drupal sites, and has a significant footprint in both ecosystems.</p>\n\n\n\n<p>We discuss the similarities and differences between the two open source CMS communities, from the mechanics of flagship events like WordCamps and DrupalCon, to the ways these projects organize their contributors and support community initiatives.</p>\n\n\n\n<p>Chris explains how Drupal&#8217;s model with its association run funding, and project governance, compares to WordPress&#8217;s approach, including how each community approaches plugin and module development, and what role agencies and companies play in contributing to Core and the broader ecosystem.</p>\n\n\n\n<p>If you&#8217;re curious about how open source projects organize themselves, how their communities navigate growth and challenge, and what WordPress can learn from Drupal, and vice versa, this episode is for you.</p>\n\n\n\n<p>If you&#8217;re interested in finding out more, you can find all of the links in the show notes by heading to wp tavern.com/podcast, where you&#8217;ll find all the other episodes as well.</p>\n\n\n\n<p>And so without further delay, I bring you Chris Reynolds.</p>\n\n\n\n<p>I am joined on the podcast today by Chris Reynolds. Hello Chris.</p>\n\n\n\n<p>[00:03:20] Chris Reynolds: Hi. How&#8217;s it going?</p>\n\n\n\n<p>[00:03:22] Nathan Wrigley: You cannot see, dear listener, what I can see. Chris has the most amazing setup where he&#8217;s doing the recording. I guess it&#8217;s an attic or something like that, but it looks like the Starship Enterprise from where I&#8217;m sitting.</p>\n\n\n\n<p>[00:03:34] Chris Reynolds: I&#8217;m working on that.</p>\n\n\n\n<p>[00:03:34] Nathan Wrigley: Yeah, it&#8217;s really nice. Chris is joining us today and we&#8217;re going to have a conversation about the WordPress community. The things that we do well, and perhaps the things that we could improve. And we&#8217;re going to probably use Drupal as a comparison.</p>\n\n\n\n<p>Before we get into that, Chris, I know it&#8217;s a dreadfully banal question, but it&#8217;s always good to scope out where you are and where you stand with WordPress and Drupal and the companies that you work for. So just a moment really to give us your little potted bio of who you are and what have you.</p>\n\n\n\n<p>[00:04:04] Chris Reynolds: Sure. My name is Chris Reynolds, I am a developer advocate at Pantheon. I was formerly a senior software engineer for Pantheon for about three years, before joining the developer relations team around August, right before WordCamp US in September last year.</p>\n\n\n\n<p>I&#8217;ve been in the WordPress community for close to 20 years. I think I&#8217;ve gone back to my first blog posts and my first, like talking about technology that I was using. And I think that I&#8217;ve found references to using WordPress in some capacity back in 2005, so almost exactly 20 years.</p>\n\n\n\n<p>But even before that I was really interested, like as a side hobby in just open source software, playing with Linux and playing with other open source community projects that I found I was really a big fan of one called Ampache for a long time, which was a music sort of library app thing written in PHP. That was really cool. I think it still exists even.</p>\n\n\n\n<p>But yeah, so I&#8217;m a developer advocate at Pantheon. That means I do a lot of these sorts of things, talk about best practices, write a lot of blog posts, get in a lot of trouble, not really, and go to events and stuff like that. So I was at DrupalCon in March. I was at PressConf last month. Probably doing stuff this summer and in the fall.</p>\n\n\n\n<p>[00:05:14] Nathan Wrigley: Just to lean in a little bit on the Pantheon side of things. Pantheon, a hosting company, but very much aligned in two worlds, maybe more than two. But from my perspective, I used to use Drupal exclusively until about 2015. That was my CMS of choice for many, many years. I think Drupal 4, and then finally I jumped ship at Drupal 8 over to WordPress and have been that consistently.</p>\n\n\n\n<p>But Pantheon was around as what felt like at that time, so we are going back more than a decade, the only sort of managed Drupal host, but it definitely had a WordPress side to it as well. Can you just speak to that for us for a moment? That is Pantheon&#8217;s sort of MVP, isn&#8217;t it? It handles managed hosting for both of those platforms. And maybe there&#8217;s more, I don&#8217;t know.</p>\n\n\n\n<p>[00:05:57] Chris Reynolds: Yeah. I mean, I think that from a platform perspective, we obviously do host Drupal and WordPress. We also can host like Next.js and sort of front end sites. But the sort of hidden Pantheon magic is in the kind of DevOps, WebOps we like to call it, layer that happens like somewhere between pushing code and the code being a thing that like site managers and editors and things like work with, right? So automation tools, and we were one of the first providers that used Git by default. Now that&#8217;s not such a big deal anymore, but like that was a big thing within Pantheon for a really long time.</p>\n\n\n\n<p>When I was a developer, the first time that I used Pantheon as a developer when I was back at WebDevStudios was, the thing that was the killer feature for me was we have a thing called Multi Dev, which is, each site has a development, a test, and a live environment. So everybody gets those three things and we have a very specific sort of workflow. Code goes to dev, to test, to live in that order. But we have these Multi Devs, which are entirely separate containers where you can build, you can do all your feature development on a branch in a Multi Dev and see what that looks like before merging it into dev.</p>\n\n\n\n<p>It sounds like maybe not that much now, but I know when I was back in agency life and even when I was working at Human Made and we had built our own sort of stack that had this very similar kind of system, we didn&#8217;t have Multi Dev because spinning up new containers for sites that you&#8217;re just going to destroy at some point in the next couple weeks or days anyway is expensive and hard.</p>\n\n\n\n<p>And so what that meant was the master branch, or the development branch, of all of your code is always really messy and dirty, and you want to keep that away from the code that is going to production, right? Because that&#8217;s where your experimental code is. Maybe you didn&#8217;t back it out entirely. That&#8217;s where like a whole bunch of weird database stuff is going. That&#8217;s like the junk, right? So you want to keep that separate from like your staging branch and your production branch.</p>\n\n\n\n<p>And with Pantheon, the idea is your development branch is just where your finalised code goes, because you can do all that testing in a separate environment and then when you go from dev to test, it&#8217;s not a headache, it&#8217;s just this is production ready code, basically.</p>\n\n\n\n<p>[00:08:10] Nathan Wrigley: Yeah, I remember my recollection of Pantheon was that it was one of those platforms that, well, platform really, it felt more like a platform than a host, if you know what I mean? It just offered more as a layer on top of the typical host that you might find.</p>\n\n\n\n<p>However, you also do a whole bunch of stuff around the Drupal space, but also the WordPress space. I&#8217;m just curious, maybe you don&#8217;t have this information, but maybe as a developer advocate, you do. What would you say, as a percentage, does Drupal represent as opposed to WordPress? You know, is it like an 80, 20 split, a 90, 10, a 50, 50?</p>\n\n\n\n<p>[00:08:40] Chris Reynolds: We&#8217;re almost exactly 50, 50.</p>\n\n\n\n<p>[00:08:42] Nathan Wrigley: Interesting.</p>\n\n\n\n<p>[00:08:43] Chris Reynolds: And we&#8217;ve actually honestly been 50, 50 for about five-ish years, five or six years.</p>\n\n\n\n<p>[00:08:48] Nathan Wrigley: So does that mean that in the Drupal side of things, okay, dear listener, WordPress as a CMS is a giant, it&#8217;s a leviathan of a thing, you know. Occupies a massive amount of the market share. Drupal I think is somewhere in the region of, I think it&#8217;s like 1.2% or something like that.</p>\n\n\n\n<p>[00:09:05] Chris Reynolds: Yeah, we might be creeping up to two-ish, but yeah, it&#8217;s pretty low, yeah.</p>\n\n\n\n<p>[00:09:09] Nathan Wrigley: That then implies that you as a company have, you&#8217;ve got your foot on the pedal more on the Drupal side of things. Maybe the people who are building clever things on top of Drupal are using you much more. You&#8217;re a bigger player in that space than you are inside the WordPress space, even though it&#8217;s, you know, the same in terms of revenue. As a community endeavor, Drupal probably means a lot more to you than WordPress maybe.</p>\n\n\n\n<p>[00:09:32] Chris Reynolds: Yeah, I mean definitely going to DrupalCon for my first time this last March, it&#8217;s definitely, so there&#8217;s Acquia, which is essentially Drupal&#8217;s version of Automattic. Acquia is a company that was founded by Dries, who is the founder of Drupal, and very much like managed Drupal hosting the same kind of thing that Automattic is into, and a lot of the sort of same ideas, at least from a, where it sits in the ecosystem.</p>\n\n\n\n<p>But, you know, you go to a WordCamp and you see the big Automattic booth and you&#8217;ll see a couple other sort of bigger hosting booths. At a DrupalCon it&#8217;s like, there&#8217;s the Pantheon booth and there&#8217;s the Acquia booth, and then there&#8217;s a bunch of little things. We&#8217;re definitely the kind of headliners because between the two of us, I think probably we do own most of those Drupal sites that exist in the ecosystem. But we&#8217;re definitely a bigger fish in that pond, than perhaps the WordPress pond. There&#8217;s also a lot more fish in the WordPress pond.</p>\n\n\n\n<p>It&#8217;s an interesting thing, like for me coming to DrupalCon for the first time, to see just what Pantheon&#8217;s footprint is in contrast to when I go to WordCamps. And, you know, we were big in WordCamps for a long time, and then we kind of pulled back a little bit, and then the intervening time it&#8217;s I think felt by the community like, well, who are you? Where did you go? We&#8217;ve gotten sort of feedback from folks being like, I used to think about Pantheon, but like it&#8217;s been a long time, you laid a lot of people off. Why should I care anymore?</p>\n\n\n\n<p>And that&#8217;s, you know, part of my personal goal is to say, no, this is why you should care. That&#8217;s one of the things that excited me of joining the DevRel team was to go back to our roots and go back into the community, and we still have a really good product that I believed in when I was a developer and I still think is really good as, you know, obviously I think of it as a developer advocate. But like I&#8217;m here because I like the thing. I think we have a good thing.</p>\n\n\n\n<p>[00:11:19] Nathan Wrigley: Do you basically have the exact same platform for both of the CMSs? So I know there&#8217;s all the other stuff that you do, but let&#8217;s just concentrate on Drupal and concentrate on WordPress, those two things. Do you basically have the exact same platform? Or is there some nuance that you can do this on WordPress because of, I don&#8217;t know, WP-CLI or the REST API or whatever it is that you can&#8217;t do in the Drupal side? In other words, if I sign up for a Drupal account, do things look different, behave differently, or is it broadly the same?</p>\n\n\n\n<p>[00:11:45] Chris Reynolds: It is broadly the same. There is sort of individual differences but they&#8217;re very minor. And honestly like, in many ways, I think that when Pantheon, and this is before my time, obviously, but I think when Pantheon jumped into the WordPress boat, it was really more of a, well, we have this stack and we&#8217;re really good at this thing, and WordPress is also a PHP application that has a lot of the same requirements, surely we can just run the exact same stack for WordPress.</p>\n\n\n\n<p>And what&#8217;s sort of evolved over time is like, well, that&#8217;s like 80% true, but it&#8217;s the 20% that&#8217;s really important. And if you just go into building WordPress sites or hosting WordPress sites with the same mentality as you&#8217;re doing Drupal, well, you are going to run into a lot of the growing pains that we ran into, right? Drupal from like a database perspective is far more efficient. The queries are much shorter because the way that it&#8217;s structured is more efficient than WordPress. WordPress, you kind of have to do more sort of optimisation on top. So those are things that we needed to figure out.</p>\n\n\n\n<p>The Drupal space sort of moved toward Solr as their sort of search tool of choice, which is a project from the Apache project. WordPress went into Elasticsearch. So trying to convince a WordPress team to use Solr, in fact, a pretty old version of Solr, is kind of pulling teeth. Like, well, why would I do that when I&#8217;m doing Elasticsearch for everything else? I don&#8217;t know why you would do that, honestly. Like, you should probably use Elasticsearch.</p>\n\n\n\n<p>And so we&#8217;re like actually going in, that&#8217;s a project that&#8217;s on the roadmap as well finally, it&#8217;s something I&#8217;ve been talking about for like three years internally. There&#8217;s little nuances. Drupal obviously since version eight has been using Composer as a fundamental part of how the CMS just works. Whereas WordPress, you&#8217;ve got some people that are using Composer, in fact, last time I was here, two years ago, I was talking about Composer. And I don&#8217;t know that the adoption of Composer has really changed much in the WordPress ecosystem since that time.</p>\n\n\n\n<p>I would like to say that it has. I still think that you should be using Composer. Throwback to the last WP Tavern Jukebox podcast that I was on about Composer. But yeah, so there&#8217;s little differences and I think that that&#8217;s, there&#8217;s not anything from a platform level where your experience is going to be that much different.</p>\n\n\n\n<p>[00:14:00] Nathan Wrigley: Yeah. If you were to take a look at the Pantheon platform, I think quickly poking around on the site, maybe the pricing page or something would give you an intuition that really you are kind of more for the sort of enterprise level, I think would be fair to say. You know, you are trying to get the bleeding edge out of the websites that you&#8217;ve got, and so it&#8217;s, high traffic, that kind of thing.</p>\n\n\n\n<p>But the endeavor today really is to put all of that code stuff to one side and get into the community side of things. So just to reiterate, we threw around a couple of words there, and maybe the listener doesn&#8217;t really know that even there&#8217;s a WordPress community or a Drupal community.</p>\n\n\n\n<p>There really is. There&#8217;s just hundreds, maybe thousands of people who attend events, they might go to a local thing, which we might call them Meetup on the WordPress side of things. I don&#8217;t know if there&#8217;s similar things in Drupal. But then there&#8217;s these bigger events, which we&#8217;d call WordCamps, and then there are bigger ones of those which are kind of flagship WordCamps.</p>\n\n\n\n<p>There&#8217;s one in the US, there&#8217;s one in Asia, and there&#8217;s one in Europe. They happen each year. And thousands of people show up and inhabit the same space, listen to presentations, hang out in the hallway.</p>\n\n\n\n<p>And then you&#8217;ve got the same thing happening on the Drupal side. It&#8217;s called Drupal Con, but forgive my ignorance, I think the DrupalCon thing is a once a year thing and it moves around the globe. It&#8217;s not necessarily in the same space. Have I got that about right?</p>\n\n\n\n<p>[00:15:15] Chris Reynolds: It&#8217;s more than once a year. It&#8217;s actually the equivalent. So DrupalCon is the equivalent of flagship WordCamps. So there&#8217;s a DrupalCon, there was a DrupalCon US in Atlanta this last year. There is going to be a DrupalCon Europe in, where is it? Maybe Vienna, in the fall. There&#8217;s a DrupalCon Asia that&#8217;s just starting to get fired up. That&#8217;s happening I think in, the next one is like 2026, I believe. I think they just had their first one. So very similar, like the Cons in the Drupal space are equivalent to the flagship WordCamps. There&#8217;s also DrupalCamps in much the same way as there are local WordCamps.</p>\n\n\n\n<p>I feel like in the WordPress space, a lot of the local WordCamps kind of, they either blew up and got super big, or they kind of fizzled after Covid, right? I don&#8217;t have a lot of local camps. I don&#8217;t see a lot of local camps anymore. I do see those things happening a little bit in the Drupal space, or at least starting up again.</p>\n\n\n\n<p>[00:16:08] Nathan Wrigley: Yeah so, what we&#8217;re basically painting a picture of here is that we&#8217;ve got two bits of software which basically are trying to achieve the same thing. They&#8217;re a CMS. They&#8217;re trying to make it so that non-technical, as well as technical people, can run a project and put it online. Whether that&#8217;s a website or an e-commerce solution, whatever it may be, you&#8217;re trying to get your stuff out onto the internet. And both of those things will work.</p>\n\n\n\n<p>But also, behind the code is a bunch of people who are willing to go and hang out in the same place, the community, if you like, attend these events. And so there&#8217;s massive similarity. In fact, you know, if you&#8217;re an alien landing, I suspect that you wouldn&#8217;t really know that the two things were different. Okay, there&#8217;s different advertisers in the hall and there&#8217;s different logos and things, but broadly they would probably look really similar.</p>\n\n\n\n<p>However, in the more recent past, and if you don&#8217;t know the story, I&#8217;m not going to go into it too much here, but you can figure it out by looking at various news articles in the WordPress space and what have you. The WordPress community has really been pulled in different directions, let&#8217;s say that. And it&#8217;s curious because no sooner had this happened than some of the more prominent people, Dries Buytaert, who is the founder of Drupal, put out a piece, really as a way of kind of offering, look, this is what Drupal do. We know you&#8217;ve got on the WordPress side things that are not working out for you. Here&#8217;s our model.</p>\n\n\n\n<p>And far be it from me to say whether that is the perfect system. I don&#8217;t really know it, but I was just curious to get your thoughts on what that is. And that&#8217;s going to really occupy the majority of the rest of this podcast. What the Drupal community looks like. What you believe it does well. How it does things differently. So let&#8217;s start there. Let&#8217;s start with Dries&#8217;, what he was telling us about. How does Drupal, the community, how does it do things differently in terms of, I don&#8217;t know, events, the access to the code? So yeah, a conversation around that really. So I&#8217;m just going to throw it over to you, Chris. How is Drupal different than WordPress on that level?</p>\n\n\n\n<p>[00:18:05] Chris Reynolds: Well, I was saying before we got on that I kind of had a crash course in Drupal when I went leading up to, and then immediately following going to DrupalCon. Part of that crash course was at DrupalCon, they actually have a community summit. It&#8217;s similar to like, in WordPress we&#8217;ve had sort of community summits before. At DrupalCon it was really more of like a track, with like presenters and like also conversations. It&#8217;s like space for chatting and hanging out with people.</p>\n\n\n\n<p>But mostly, mostly it was like community related talks in a space, talking about what&#8217;s working, what&#8217;s not working, as well as a sort of a get to know you sort of thing. And that was really helpful. I also did homework before the event in watching a couple of Dries&#8217; last Dries Notes. So Matt has State of the Word, Dries has Dries Notes, which is just like keynote. It&#8217;s basically the same thing, like the same state of the CMS, right?</p>\n\n\n\n<p>I caught up on what was going on in Drupal before the Con. And one of the things that I learned about, and then I followed up and dug into the history a little bit, was we have the same problems, right? WordPress and Drupal have the same fundamental sort of issues from both a contribution standpoint as well as a just organisational, managerial management kind of standpoint.</p>\n\n\n\n<p>And Drupal, or Dries, just kind of got to a point sooner where he&#8217;s like, well, I can&#8217;t do all of these things. So the Drupal Association, and I&#8217;m sure there&#8217;s some Drupalistas that are going to correct me on my history, but as I understand it, the Drupal Association was initially formed to sort of manage events, because Dries knew that they needed to have events. They were having events, they started off just similar to WordPress, small camp things. And they started getting bigger and Dries is like, well, I can&#8217;t do all of the management stuff of this, so I need to like do something, create an organisation that can do that stuff.</p>\n\n\n\n<p>And that was where the Drupal Association first was founded, to sort of manage that thing. And then over time, that evolved into being able to fund, or kind of oversee, directions for where, more of like a community representative in the general sort of CMS development ecosystem, right?</p>\n\n\n\n<p>There is a board. They are elected by the community. They are paid. They manage events, but they also, all of the money that is made after expenses and stuff from DrupalCons and donations and whatever, they have the authority to direct into whatever projects they think would be most valuable for the evolution, or the fulfillment, of the ideals of the Drupal software, right?</p>\n\n\n\n<p>So Dries says, I want to do a thing, and he can go do that thing. The Drupal Association is like, well, I think that what we really need is this kind of thing, and we&#8217;re going to devote some of our resources that we have into hiring some folks to work on that thing.</p>\n\n\n\n<p>So, most recently, where you can kind of see this in action is there&#8217;s been a lot of hype about Drupal CMS. That is a thing that exists because of the Drupal Association, because the Drupal Association saw, okay, I mean, I assume, I&#8217;m reading between the lines. But I assume that you can&#8217;t ignore the sort of declining line of Drupal in the broader ecosystem of CMS usage. But also, there&#8217;s been a really big problem since Drupal seven of a lot of the sites on Drupal seven remain on Drupal seven.</p>\n\n\n\n<p>Drupal seven should be end of life by all accounts. Everything else up to the current version is end of life. Drupal seven isn&#8217;t, because there&#8217;s still, it&#8217;s now just under, but it&#8217;s still close to 50% of Drupal sites are running Drupal seven. It&#8217;s a version of Drupal that&#8217;s about 10 years old.</p>\n\n\n\n<p>And the reason why, there&#8217;s so many people. Drupal historically has always been a thing where, when a new version came along, you kind of killed your old site and rebuilt it in the new version, because it wasn&#8217;t sort of backwards compatible. WordPress has gotten around that by just remaining backwards compatible all throughout its history.</p>\n\n\n\n<p>Drupal seven to Drupal eight was the first version to introduce Composer. We talked about Composer and how a Composer&#8217;s been part of Drupal for a really long time. that was the cutoff. So that was a pretty big shift. And there&#8217;s a lot of people, teams, organizations that have not made, or have been reluctant to make that shift because it&#8217;s a, it&#8217;s a rebuild. It&#8217;s a full site rebuild.</p>\n\n\n\n<p>It&#8217;s not just, we can just migrate the thing over. You have to rebuild your site. You do need to migrate your stuff over, but also you need to rebuild your site. So in the intervening time, WordPress has gained adoption and acceptance and grown into 43%. And so now we&#8217;ve got these Drupal seven sites where it&#8217;s like, well, we need to rebuild anyway. Do we rebuild the site in Drupal 10, 11? Or do we rebuild the site in WordPress where I&#8217;m never going to have this problem ever again.</p>\n\n\n\n<p>And that&#8217;s where a lot of that like, bar graph, a lot of those sites have moved to WordPress. Some of them have stayed on Drupal, but it&#8217;s a declining number, right?</p>\n\n\n\n<p>So obviously, folks inside Drupal see this and know that it&#8217;s happening, and know that they need to do something about it. So Drupal CMS is basically like a layer on top of the latest version of Drupal, which is 11. It&#8217;s got a far nicer installation screen. I wrote a blog post about this on the Pantheon blog, I think. It&#8217;s got a far nicer installation screen, that actually walks you through, stepping through like what type of site, what type of content you want to have on your site. To actually get you thinking about the site that you&#8217;re building before you just hit install. Which I find to be amazingly refreshing.</p>\n\n\n\n<p>And then beyond that the admin interface is far less cluttered. I know one of my personal gripes about working with Drupal, even up until, up until now, like up until before Drupal CMS is that there&#8217;s too many buttons, there&#8217;s too many menus, there&#8217;s too much stuff. Like, I don&#8217;t know where stuff is.</p>\n\n\n\n<p>This feels a lot more familiar, partially because I think it kind of resembles the WordPress admin a little bit. You know, sidebar on the left, menus. And it feels just more, more familiar to me. And then also they have built in some new architectural things like, recipes are a thing where, a recipe, Drupal has modules, WordPress has plugins. Modules generally need a lot of configuration, to get them actually working.</p>\n\n\n\n<p>When you install a module, it&#8217;s not like it just works outta the box. A lot of WordPress plugins, you install a plugin, it just works outta the box. So a recipe is like, here is, maybe a collection of modules, maybe a specific module, but it&#8217;s probably a combination of a bunch of different modules, but also the configuration that goes along with them.</p>\n\n\n\n<p>So when you install a recipe, it&#8217;s like, here&#8217;s the stuff that you probably will need. You&#8217;re most likely to need this stuff in this order, configured with these settings, and then you can do whatever you need after that. But like, here&#8217;s the go bag and now you can move on. So, one of the really interesting recipes for Drupal CMS is the SEO recipe.</p>\n\n\n\n<p>And that is interesting because they&#8217;re using a Yoast module. The Yoast module is literally taking the JavaScript of Yoast SEO from the WordPress plugin and throwing it into Drupal. And what&#8217;s fascinating about that is it doesn&#8217;t have all of the other stuff that comes with the Yoast plugin, it&#8217;s just the traffic light system, and the scanning the text system and it&#8217;s, so it&#8217;s the best possible implementation of Yoast that I&#8217;ve seen because it&#8217;s all of the good stuff.</p>\n\n\n\n<p>They&#8217;ve also built an AI recipe. And that&#8217;s interesting because when that is configured, you can actually talk to an AI chat bot inside your Drupal instance and ask it questions about Drupal or about your site. You could say, hey, I need to create an event content type. I&#8217;m gonna be hosting events. They&#8217;re this type of thing. I need to have a, like a, date picker and whatever, and we are taking attendees and you can tell that the chat bot that that&#8217;s the thing that you need. And it will, to the best of its ability, build that content type inside Drupal for you.</p>\n\n\n\n<p>So the WordPress equivalent is, I have a podcast and I need an episode post type. I just talk to a chat bot, and it magically creates that episode post type for me with like the Gutenberg blocks I need. That makes it an audio format or whatever. And, it&#8217;s just there for you. It&#8217;s like, great, thank you chat bot. As a WordPress developer, I think that&#8217;s really cool. Because that&#8217;s kind of the thing that I want, is like I know how to do some things, but I really don&#8217;t know any of the buttons and gears and gizmos in the Drupal admin.</p>\n\n\n\n<p>But if I have a chat bot to sort of help guide me through, I know I can figure out the rest of the way, or I can see how it did the thing, and I can figure out, oh okay, so that&#8217;s what I need to do. And so all of these things are geared toward the idea of just getting more people using Drupal and lowering the barrier to entry.</p>\n\n\n\n<p>Because one of the big things with Drupal is it&#8217;s always been really developer centric, really highly technical, and you need sort of skilled individuals to even just manage the site. So if we lower that barrier to entry, you can target the people that are already using WordPress, the sort of content level people or the site administrators that don&#8217;t have a lot of technical experience.</p>\n\n\n\n<p>That&#8217;s all like basically because the Drupal Association put money, funding that they had into backing these very specific projects.</p>\n\n\n\n<p>[00:27:25] Nathan Wrigley: It is kind of a curious idea, isn&#8217;t it? It&#8217;s like a subset of the CMSs capabilities put into this one project, Drupal CMS. Which has like a target audience in mind. So it&#8217;s like a blogger, or a podcaster or something like that. You know, it&#8217;s for content creators. That was the message I got from when I read all of the, the marketing bits and pieces that came out.</p>\n\n\n\n<p>But also addressing the need for it to look nice. That was always an area I thought WordPress excelled at. When you logged into the WordPress admin, it was night and day looking at a Drupal admin. Everything was consistent. Everything looked modern and clean and easy to understand. On the Drupal side, it was, it was much more difficult to understand. But also things like updating plugins. Backwards compatibility on the WordPress side, always much more straightforward. On the Drupal side, much more difficult.</p>\n\n\n\n<p>And so this is such a curious experiment. Putting it into the hands of people who might want a blog, or whatever it may be, and hopefully making it more straightforward. And the website for it, I will link to it in the show notes, it&#8217;s just so kind of modern and appealing and friendly and, Drupal never, for me at least when I got to Drupal eight, for the exact reasons that you described, that&#8217;s all of my sites would have stayed on Drupal seven.</p>\n\n\n\n<p>It definitely wasn&#8217;t that kind of warm and fuzzy welcome to everybody kind of thing. But now it really look like it&#8217;s leaning into that. But getting back to your main point, that was funded from the inside by some, facets, some internal mechanisms, some body inside the Drupal Association that decided that&#8217;s what we need to do. This is where the money&#8217;s going. But are you saying that decision making was divorced from Dries?</p>\n\n\n\n<p>[00:29:02] Chris Reynolds: Dries leads the technical architecture. And Dries will like say we need to do a thing. And he may be personally involved in the leadership of doing that thing, but mostly he&#8217;s like at a director level. Like, go my people and go forth and do stuff. And the Drupal Association says, okay, well one of the things that Dries said we need to do is X. So how can we make X happen? And in the case of recipes, it meant getting agencies and people from agencies involved. Create like a coalition. Like there&#8217;s a bunch, it wasn&#8217;t just one agency. It was like a bunch of people from different agencies are working on this thing together. Which is another thing that I find really interesting about the Drupal ecosystem.</p>\n\n\n\n<p>I have thoughts about that too. But in this context, yeah, I get a bunch of different people to work on this thing. Um. Whether it&#8217;s the SEO recipe. Whether it&#8217;s the AI recipe, and they, I think the way that it sort of broke down is, and it might have been even Dries that conceptualized the idea of recipes and it&#8217;s like, okay, go out and implement this thing.</p>\n\n\n\n<p>But when they did, it was like, okay, if we&#8217;re gonna do this thing, we need these types of recipes from the get go, from day one. We need SEO, we need whatever. We need AI, we need content things, so that people have an idea of what a recipe is and can start building their own recipes.</p>\n\n\n\n<p>[00:30:15] Nathan Wrigley: So they&#8217;re bound into it? You can&#8217;t install Drupal CMS without those things. They&#8217;re just there.</p>\n\n\n\n<p>[00:30:20] Chris Reynolds: It supports the recipes, and in the installation process, when you&#8217;re doing the Drupal CMS installation, that screen that I was talking about, where it&#8217;s like asking you the type of site you want to build, those types of sites in quotations, correspond to sets of recipes that align with each of those things.</p>\n\n\n\n<p>It doesn&#8217;t ask you about AI in the installation screen, but it does sort of say like, oh, do you want this type of content or that type of content? And then we, based on your selection, it automatically installs those recipes for you.</p>\n\n\n\n<p>[00:30:48] Nathan Wrigley: So it&#8217;s installing things based upon a wizard at the beginning, but the principle being though that you the end user, not really interacting with anything apart from oh, I would like that. Yes, please. I would like that. And then you finally get to the end of the wizard, wait for a few moments. The modules get installed, activated, and they&#8217;re pre-configured to behave in a way which is likely to be the best that you can get.</p>\n\n\n\n<p>[00:31:08] Chris Reynolds: To get you as close to what you want as possible. And the goal, the roadmap, is Dries wants to actually take that one step further, and do sort of site templates where if a recipe is a collection of modules and configuration, a template would be like, I want to build a real estate site. So I download this template, or I install this template and then click a button or two and it gives me a real estate site with the configuration that I might need to have a real estate site.</p>\n\n\n\n<p>And obviously I can go in and customize things, but I have a starting point. One of the things that I heard a lot when I was talking to people within Drupal, among other things, there&#8217;s not really a marketplace as much for stuff, for software, for add-ons in the way that there is in WordPress. And there&#8217;s not really in particular, there&#8217;s not really the same sort of like theme or a repository, or a place to go for commonly used or shared themes in the way that we have the Themes Repository. Mostly you have like the default things and then you&#8217;re building your own.</p>\n\n\n\n<p>So, as a user, having a template that maybe comes with a theme that is specifically tuned for that type of site is a really big win, because there really isn&#8217;t an alternative in the current ecosystem within Drupal.</p>\n\n\n\n<p>[00:32:23] Nathan Wrigley: Yeah, that&#8217;s, really worth leaning into because again, please interrupt me if what I&#8217;m about to say doesn&#8217;t actually match reality anymore. But when I was using Drupal, there was basically no commercial plugin system. Everybody had kind of leaned into the same thing for the same problem.</p>\n\n\n\n<p>So if you wanted to put a form on your website, there were a few, but there was this one called Webform, and it was just the one everybody leaned into it. And so rather than in the WordPress space where you&#8217;ve got, you know, you&#8217;ve got a few repository ones that are free and easy to use, and then you&#8217;ve got the commercial ones that you can pay for and they add different features and support levels and all that kind of thing.</p>\n\n\n\n<p>In the Drupal space, it felt like there was just this one kind of community endeavor to do the thing. Yeah, so if you wanted something to display data, Views was the thing you used. The Views module, and I think that did actually get rolled into Core. So it&#8217;s there. My point being, there isn&#8217;t this sort of, shattering is the wrong word, but in the WordPress space, there&#8217;s often a dozen, more than a dozen, there&#8217;s multiple alternatives. So you have to go and find the right thing.</p>\n\n\n\n<p>In the Drupal space, it feels more like, okay, for that problem, we have this module, and everybody leans into it. So I&#8217;m presuming that all the people who contribute in the community to the code and what have you, they&#8217;ll all finesse that version. But that means therefore, that when you come to build the CMS, there&#8217;s basically this one way of doing it? Okay, if you want forms, we&#8217;re going to use that module. And if we&#8217;re going to add this feature for real estate or what have you, here&#8217;s the modules that we&#8217;re going to add in. And the jigsaw of those modules will make it work. And that&#8217;s different from WordPress. WordPress has much more leaned into commercial plugins and kind of figure out which ones you want for yourself.</p>\n\n\n\n<p>[00:34:04] Chris Reynolds: Yeah, that was one of the things that I didn&#8217;t know going into DrupalCon that I learned while I was there. It&#8217;s a really different approach, and I actually kind of appreciate the Drupal model because the community is built around more of an idea of, if I build a form plugin and you build a form plugin, and mine is the defacto form plugin or.</p>\n\n\n\n<p>In the Drupal space, it&#8217;s really more of a, well, let me talk to you and see what ideas you have that we can bring into the canonical one and just collectively like integrate those things. And that&#8217;s, that is a thing that happens more often than not in Drupal. That&#8217;s why you don&#8217;t see the competition, the competing modules for different things.</p>\n\n\n\n<p>Because if you had a competing thing, or you had a different idea, you would contribute it to the one module that does that thing. Or if you had a different thing, then you might be invited to do the same, right?</p>\n\n\n\n<p>In the WordPress space, it&#8217;s like I want to protect my form module or my form plugin because right now it&#8217;s free, but tomorrow I might want to sell it, and I want to keep my intellectual property to myself and not contribute because, you know, I might wanna make a buck on this later.</p>\n\n\n\n<p>And, I kind of like the other thing better because it&#8217;s more, it is more of a community. Like I get like wanting to make money and everybody wants to make money and have a form plug in. Like, that&#8217;s great. Like I&#8217;m not going to say Gravity Forms shouldn&#8217;t exist or anything like that. Gravity Forms is amazing. But I do think that building an ecosystem around contributing to a collective, or a community based solution for the thing, where everybody has a, a say or a seat at the table, is a really, I don&#8217;t know, possibly overly idealistic, but very optimistic sort of view of how we can contribute to software.</p>\n\n\n\n<p>I find it really nice. Like it feels good. Like it feels less like we&#8217;re all trying to grab our little piece of territory, you know?</p>\n\n\n\n<p>[00:35:53] Nathan Wrigley: It feels to me like that moment when you first install Linux. And you realize, wow, there&#8217;s a free OS that I can put on my computer. And there&#8217;s just something quite remarkable about that. That a bunch of people got together and, really pointed everything at this one solution. I suppose that is the choice that you&#8217;re going to make. Really, that there is something right in there.</p>\n\n\n\n<p>You know, the commercial side of WordPress has probably been its single biggest accelerator. The fact that people could build businesses on it. And they could have a living. They could obviously refine and finess and dedicate real time entire lifetimes, in many cases. Get staff on, support staff and what have you. Pay all of those people because they&#8217;ve cracked this nut and everybody wants a piece of it.</p>\n\n\n\n<p>Whereas on the Drupal side, it&#8217;s much more, let&#8217;s go for egalitarian, let&#8217;s say that. But it, also, I suppose, means that at the moment where something doesn&#8217;t work you probably have to either understand how to maintain that yourself or hire a developer.</p>\n\n\n\n<p>So there&#8217;s a bit of a trade off there. And I presume, like I said, I imagine that&#8217;s why there was this acceleration of WordPress&#8217;s popularity because the people who maybe were buying these plugins had that intention, I just want a website. I don&#8217;t want to learn how to code. I&#8217;m not interested in that.</p>\n\n\n\n<p>I can see over here, look, I can buy that. It&#8217;s $97 a year. That&#8217;s perfect. That&#8217;ll satisfy me perfectly. Whereas maybe more on the Drupal side, it&#8217;s okay, that kind of works, but not entirely. I now need to make it work and obviously the community can do that.</p>\n\n\n\n<p>So that leads me then to the next question, which is, who the heck builds Drupal? So in the WordPress space, if you&#8217;re listening to this, you probably have an understanding of that. There&#8217;s a lot of volunteers, but there&#8217;s also a lot of companies that will dedicate a proportion of their time. We have this idea of Five for the Future. And so 5% of whatever it is that you want to give, be that time or money, or what have you. And so there&#8217;s this idea of community massively, but also corporations, businesses, putting time in. Is it the same basically on the Drupal side? Is that how it works?</p>\n\n\n\n<p>[00:37:51] Chris Reynolds: Yeah, largely. One of the things that I think you&#8217;ll notice that is a little bit of a distinction between WordPress and Drupal, from the events again. Is going through like the showroom, the sponsors floor. And at a WordCamp you see the hosts obviously, but then you see a lot of like plugin development shops, and that&#8217;s pretty much what I would expect, right? Big plugin or theme development shops and WordPress hosts. And a lot of the WordPress hosts are doing plugin development, and like, that&#8217;s sort of the thing.</p>\n\n\n\n<p>In Drupal, and at DrupalCon, obviously we have the hosts. And we had a, I mean, CKE Editor was there. That was kind of weird to me. I don&#8217;t know, like it&#8217;s in Drupal. It was weird to have like a library have a booth space. That seemed weird to me. But like it&#8217;s a lot of agencies, because agencies are the ones that are doing the work, and I&#8217;ve never seen an agency or maybe not since very small, like local WordCamps, have I seen an agency with a sponsorship, a booth space at a WordCamp.</p>\n\n\n\n<p>But that is, that&#8217;s where it is. And it&#8217;s agencies that do a lot of that Core contribution, because they&#8217;re also in the weeds working with clients and building these things for their Drupal customers. And so like, the SEO recipe that I was talking about, like at DrupalCon we, Pantheon has booth demos. Acquia also has booth demos, which means we can talk about, like do demos of our platform, whatever. What we actually did was bring in guest speakers from like agencies and universities and whatever that are actually using Drupal and Pantheon and to talk about their implementation of the cool stuff that they&#8217;re doing, because that works better.</p>\n\n\n\n<p>And one of the people that I talked to was about the SEO recipe, and he is at an agency and he worked with other people at other agencies, competing agencies even, to make this SEO recipe. So it&#8217;s, that&#8217;s where the contribution comes from. But again, like it&#8217;s the same sort of thing.</p>\n\n\n\n<p>Dries said 10 years ago, wrote a blog post about the maker taker problem, as he defines it. And then again in September, in relation to the current state of things in the WordPress ecosystem, because that&#8217;s a thing that he&#8217;s been thinking about for a long time. It&#8217;s obviously a thing that Matt&#8217;s been thinking about for a long time.</p>\n\n\n\n<p>Like it&#8217;s not, again, we&#8217;re not that different. We have the same fundamental problems. At the Community Summit at DrupalCon, one of the topics of conversation was getting more people involved, a younger generation involved into Drupal development, which is the exact same conversation we&#8217;re having in WordPress as well.</p>\n\n\n\n<p>Like, how do we appeal to a younger audience? It&#8217;s all the same stuff, right? And there was at some point like a contribution like pie chart. Again, similar to the pie chart that could be displayed at a WordCamp. You know, Automattic does a big chunk of that pie chart.</p>\n\n\n\n<p>And then you&#8217;ve got, you know, maybe Google does a smaller part of that pie chart and maybe like Bluehost or whatever. Similar pie chart. Acquia does a lot of the big part of the, of that pie chart. And then like other agencies are noted around, and then there&#8217;s like an other category, right, of just like individual contributors. It&#8217;s a very similar breakdown.</p>\n\n\n\n<p>[00:40:47] Nathan Wrigley: It&#8217;s interesting because obviously you alluded to the fact that WordPress has been in a state of flux since September. But Dries, I presume prompted by the situation that arose out of WordCamp US. He wrote a piece very much timed after that. So I presume it was in, there was some sort of correlation in his head. And he was laying out how Drupal have, not solved, but how they just have a different approach to that. And I can&#8217;t remember every single detail, but there was some curious examples in the Drupal community, like this kind of, I&#8217;m going to say pay to play thing.</p>\n\n\n\n<p>In other words, if you as a company, let&#8217;s say Pantheon may fit into this perfectly, if Pantheon steps through certain hoops and can prove that they did this thing and this thing and this thing for the community, for the Drupal project. If you step through those hoops, you then get, kind of, merit on the other side.</p>\n\n\n\n<p>You can, for example, turn up to DrupalCon as a sponsor. My understanding is that maybe it&#8217;s only certain tiers, I&#8217;m not really sure. But you can&#8217;t sponsor DrupalCon unless you have jumped through those hoops. And we don&#8217;t really have anything on the WordPress side like that. We have Five for the Future, but it&#8217;s hard to pin down. It&#8217;s hard to figure out who did what and what have you, because there aren&#8217;t the same sort of goalposts, but it feels like the goalposts are a bit more nailed down on the Drupal side.</p>\n\n\n\n<p>[00:42:03] Chris Reynolds: There is a process of nailing things down. I don&#8217;t know that it goes to the level of, like you can&#8217;t actually sponsor, because obviously Pantheon does sponsor and we&#8217;ve been, on the other end of being told that we don&#8217;t contribute enough to both WordPress and Drupal. But that also depends on how you define contribution really. And I have thoughts about that. The merit thing, it&#8217;s just where you&#8217;re drawing the lines in the sand. And Drupal has, Dries has his particular lines and the things that make you a contributor to the ecosystem, and what that means in Drupal.</p>\n\n\n\n<p>And then, to a degree, I mean, yeah, like you said, Five for the Future is kind of, sort of that thing, but it&#8217;s also kind of amalgamous and like it&#8217;s honor based. There&#8217;s not really a real sense of tracking or, you could kind of, sort of track things, I guess. But it&#8217;s very wibbly wobbly.</p>\n\n\n\n<p>But my perspective on contribution always has always been, one of the things, I know we&#8217;re not supposed to talk about what was talked about at PressConf, but Brad Williams, who I, was my former boss said, he was talking about Five for the Future and was talking about how Web Dev was very early on an adopter of Five for the Future, and I was there at the time, so I remember this. So it&#8217;s not just Brad&#8217;s words that I&#8217;m repeating. And the way that he approached Five for the Future was very much in the umbrella of if you&#8217;re doing anything WordPress related that is open source, we are counting that as a Five for the Future project, right. And that was how I understood Five for the Future.</p>\n\n\n\n<p>That was kind of how it was presented back in 2014 or whatever when Matt first threw the idea out to the, out to the ecosystem. And since then it&#8217;s sort of become this thing where contribution to WordPress really means Core contributions, or contributions in very specific ways. And it doesn&#8217;t mean all of this other stuff over here, including an up to theme development, plugin development.</p>\n\n\n\n<p>Even if that stuff is on .org, even if that stuff is open source, that&#8217;s not included in contribution. But I&#8217;m very much in the side of the bucket where like, well, everything is kind of contribution. We wouldn&#8217;t know how good WordPress scales to like enterprise level sites that are running it today, that are driving the adoption of WordPress, and driving the bar in like the visibility of WordPress, if it wasn&#8217;t for just hosts that are running the thing and making sure that it operates properly. And the teams like 10up and Human Made, and whoever who are like then, oh, to get this working at its best, fastest, most optimized state we need to do some enhancements. Either through the plugin ecosystem or contributing back to Core, so that we can push this code to these hosts, or platforms, or softwares as a service or whatever so that they operate for these clients that we&#8217;re building.</p>\n\n\n\n<p>So like I kind of feel like everything should be, even if you are a taker, in the language of Dries, that doesn&#8217;t necessarily mean that you&#8217;re not pushing the ecosystem forward. And I have that critique for both of our BDFLs, right? Because they both have very similar ideas.</p>\n\n\n\n<p>Like I think that the contribution title could be applied and should be applied more broadly, because everything that we&#8217;re doing is driving the project forward. A lot of the stuff that I write is like GitHub actions, or like plugins or things that are still broadly available to, and publicly available, and they&#8217;re open source and they&#8217;re for the community, but they&#8217;re not technically contribution, because contribution is narrowed down into this very specific definition.</p>\n\n\n\n<p>[00:45:30] Nathan Wrigley: It&#8217;s kind of curious, you know, if you were to cast your mind back 20 years, the beginning of both Drupal and WordPress, just even the idea that they would still be around for one thing, you know, that that software wouldn&#8217;t have just come and eaten them up and there would be like a two year lifespan.</p>\n\n\n\n<p>[00:45:44] Chris Reynolds: And that there&#8217;s an open source solution for these things.</p>\n\n\n\n<p>[00:45:46] Nathan Wrigley: And it&#8217;s going and it&#8217;s kept rising and it&#8217;s kept being used. That&#8217;s just so curious. But also the teething pains of that. The idea that, you know, it started with Matt, and it started with Dries, and then people got on board and it grew. And then in the case of Drupal, and in the case of WordPress, it just grew to the point where these individuals can no longer handle everything.</p>\n\n\n\n<p>You know, you described how Dries needed to sort of say, can somebody handle the events please? Because that&#8217;s just not where I want to be. The same, presumably on the WordPress side. And now we&#8217;re into giant communities. Really, really complicated communities. A lot of differing opinions, a lot of different maybe even politics, but a lot of different backgrounds, geography, the whole thing.</p>\n\n\n\n<p>It&#8217;s this international thing. And it&#8217;s difficult. It&#8217;s really, really hard to get it right. But what I&#8217;m taking from this conversation. Is that maybe Drupal do things differently, but they have way more in common than we have as differences.</p>\n\n\n\n<p>But also maybe there are some things that WordPress does better. Maybe there are some things that Drupal does better. And it would be very, very interesting if the two communities could kind of collide more, and share those ideas and we pick the best of each of them. It&#8217;s never gonna be perfect, but maybe that&#8217;s something that in the future, given that really at a very core level we&#8217;re not in competition with each other, it would be very nice if those conversations could take place.</p>\n\n\n\n<p>And I think you&#8217;ve laid the groundwork for a lot of that and explained how one project is not that dissimilar to the other one. So, that&#8217;s it.</p>\n\n\n\n<p>Chris, thank you so much for chatting to me today. I really appreciate it. That was very enlightening.</p>\n\n\n\n<p>[00:47:22] Chris Reynolds: Thank you for having me. I always love chatting with you.</p>\n</div></details>\n\n\n\n<p>On the podcast today we have <a href=\"https://www.linkedin.com/in/chrissreynolds/\">Chris Reynolds</a>.</p>\n\n\n\n<p>Chris is a developer advocate at Pantheon, where he brings nearly 20 years of experience in the WordPress community, as well as deep involvement with Drupal and open source technology at large. Prior to his advocacy role, he worked at some of the top WordPress agencies like Human Made and WebDevStudios. He’s been active at events like DrupalCon, PressConf, and WordCamps.</p>\n\n\n\n<p>In this episode, we set aside the usual WordPress-only focus, and turn our attention to two CMSs, WordPress and Drupal, what makes them tick, where they excel, and where they might have something to learn from each other.</p>\n\n\n\n<p>Chris draws on his unique perspective working closely with both platforms, as Pantheon is one of the few hosts with a 50/50 split between WordPress and Drupal sites, and has a significant footprint in both ecosystems.</p>\n\n\n\n<p>We discuss the similarities and differences between the two open source CMS communities, from the mechanics of flagship events like WordCamps and DrupalCon, to the ways these projects organize their contributors and support community initiatives.</p>\n\n\n\n<p>Chris explains how Drupal’s model, with its association-run funding and project governance, compares to WordPress’s approach, including how each community approaches plugin and module development, and what role agencies and companies play in contributing to Core and the broader ecosystem.</p>\n\n\n\n<p>If you’re curious about how open source projects organise themselves, how their communities navigate growth and challenge, and what WordPress can learn from Drupal (and vice versa), this episode is for you.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Useful links</h2>\n\n\n\n<p><a href=\"https://pantheon.io/\">Pantheon</a></p>\n\n\n\n<p><a href=\"https://ampache.org/\"> Ampache</a></p>\n\n\n\n<p><a href=\"https://www.drupal.org/association/drupalcon\"> DrupalCon</a></p>\n\n\n\n<p><a href=\"https://pressconf.events/\">PressConf</a></p>\n\n\n\n<p><a href=\"https://webdevstudios.com/\"> WebDevStudios</a></p>\n\n\n\n<p><a href=\"https://humanmade.com/\"> Human Made</a></p>\n\n\n\n<p><a href=\"https://www.acquia.com/\"> Acquia</a></p>\n\n\n\n<p><a href=\"https://dri.es/about\"> Dries Buytaert</a></p>\n\n\n\n<p><a href=\"https://automattic.com/\"> Automattic</a></p>\n\n\n\n<p><a href=\"https://solr.apache.org/\">Solr</a></p>\n\n\n\n<p><a href=\"https://www.elastic.co/elasticsearch\"> Elasticsearch</a></p>\n\n\n\n<p><a href=\"https://getcomposer.org/\"> Composer</a></p>\n\n\n\n<p><a href=\"https://wptavern.com/podcast/68-chris-reynolds-on-why-to-use-composer-with-wordpress\"> Chris on a previous episode of the WP Tavern Jukebox podcast talking about Composer</a></p>\n\n\n\n<p><a href=\"https://www.drupal.org/community/events?field_event_type_value=drupalcamp&amp;field_event_address_country=All\"> DrupalCamps</a></p>\n\n\n\n<p><a href=\"https://dri.es/solving-the-maker-taker-problem\">Solving the Maker-Taker problem</a></p>\n\n\n\n<p> Dries Notes &#8211; <a href=\"https://dri.es/state-of-drupal-presentation-september-2024\">State of Drupal presentation (September 2024)</a></p>\n\n\n\n<p><a href=\"https://www.drupal.org/association\"> Drupal Association</a></p>\n\n\n\n<p><a href=\"https://yoast.com/yoast-seo-for-drupal/\">Drupal  Yoast module</a></p>\n\n\n\n<p><a href=\"https://new.drupal.org/home\">Drupal CMS</a></p>\n\n\n\n<p><a href=\"https://www.drupal.org/docs/8/core/modules/views\">Drupal Views</a></p>\n\n\n\n<p><a href=\"https://www.gravityforms.com/\">Gravity Forms</a></p>\n\n\n\n<p><a href=\"https://wordpress.org/five-for-the-future/\">Five for the Future</a></p>\";s: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, 21 May 2025 14:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i: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:99:\"Do The Woo Community: From Functional to Scalable: WooCommerce Solutions with an Enterprise Mindset\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=96868\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:102:\"https://dothewoo.io/blog/from-functional-to-scalable-woocommerce-solutions-with-an-enterprise-mindset/\";s: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:209:\"Some insight on agencies who focus on enterprise-level solutions for mid-market WooCommerce clients, emphasizing customized, scalable technologies and decoupled architectures to enhance reliability and growth.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 21 May 2025 09:11: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:8:\"Bob Dunn\";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:71:\"Do The Woo Community: One For the Road via PressConf with Adam and Emma\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=97297\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"https://dothewoo.io/one-for-the-road-via-pressconf-with-adam-and-emma/\";s: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:262:\"During PressConf 2025, hosts and guests highlighted the significance of in-person connections within the WordPress community, emphasizing candid conversations, relationship-building, emotional moments, and the event\'s business focus, inspiring future gatherings.\";s: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, 20 May 2025 13:06: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:8:\"Bob Dunn\";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:88:\"Do The Woo Community: How to Say No to Feature Requests Without Upsetting Your Customers\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=96857\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:92:\"https://dothewoo.io/blog/how-to-say-no-to-feature-requests-without-upsetting-your-customers/\";s: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:212:\"The challenges of declining customer feature requests while maintaining goodwill. Strategies include transparent communication, offering alternatives, and using data for prioritization, preserving product vision.\";s: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, 20 May 2025 08: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:8:\"Bob Dunn\";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:75:\"Do The Woo Community: Your Website Could Use a Changelog to Fuel Creativity\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=96643\";s:7:\"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:89:\"https://dothewoo.io/blog/why-every-website-needs-a-changelog-and-how-it-fuels-creativity/\";s: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:221:\"Website changelogs, often overlooked, document progress and small victories. They provide transparency, spark creativity, and offer audiences insight into a site\'s evolution—important for all creators, not just techies.\";s: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, 19 May 2025 10:35:15 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";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:121:\"Gutenberg Times: 14 plugins for the block editor, Gutenberg 20.8, Studio 1.15.1, Woo 9.9 and more — Weekend Edition 330\";s:7:\"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=40398\";s:7:\"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/14-plugins-for-the-block-editor-gutenberg-20-8-studio-1-15-1-woo-9-9-and-more-weekend-edition-330/\";s: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:27364:\"<p>Hi there,</p>\n\n\n\n<p>This weekend I am at WordCamp Leipzig and spent Friday night and Saturday with about 70 WordPressers from the German community. It&#8217;s my third year attending this small, low-key WordCamp. This year, it had way more session submissions than speaker slots, and it sold out tickets with a waiting list. Congratulations to the organizing team. <img alt=\"🎉\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f389.png\" style=\"height: 1em;\" /> </p>\n\n\n\n<p>With the European Accessibility Act (EAA) set to take effect on June 28, 2025, the selection of three talks focused on accessibility is both timely and highly relevant-making them especially interesting to me. I am also looking forward to Hans-Gerd Gerhard&#8217;s walk through practical examples for block theme implementations. Talks on site performance, e-commerce, error handling and UX for Gen Z round up the <a href=\"https://leipzig.wordcamp.org/2025/zeitplan/\">session schedule</a>. Although it&#8217;s a low-key WordCamp the video team is amazing. The sessions will be recorded and uploaded to WordPressTV the same or the following day. Session are in German, though. </p>\n\n\n\n<p>Save the Date for <a href=\"https://us.wordcamp.org/2025/\">WordCamp US</a>! It&#8217;ll take place from August 26 to August 29. 2025. The call for speakers and sponsors will come out on May 19, 2025, so keep an eye out. If all goes well, I will return to WordCamp US after three years, to finally see my WordPress friends from a previous life again. <img alt=\"🎉\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f389.png\" style=\"height: 1em;\" /> Will I  see you in Portland, OR, too? </p>\n\n\n\n<p>I could call today&#8217;s newsletter, <em>The Plugin Edition</em>, as it mentions 14 plugins that will help with content creation, making a visual impact and organizing your site. It&#8217;s actually 16 plugins if you count Gutenberg and WooCommerce as well. Have fun browsing, and please hit reply if you have any opinion or other plugins to mention. Listing those plugins here doesn&#8217;t mean I recommend them, you would need to test them for yourself. I just wanted to surface them as it&#8217;s a bit difficult to find new plugins in the WordPress repository.</p>\n\n\n\n<p>Have a lovely weekend! </p>\n\n\n\n<p>Yours, <img alt=\"💕\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f495.png\" style=\"height: 1em;\" /><br /><em>Birgit</em></p>\n\n\n\n\n<section class=\"wp-block-newsletterglue-group\" style=\"padding-top: 10px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; margin-top: 0px; margin-bottom: 0px;\">\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>Table of Contents</strong></p>\n\n\n\n<nav class=\"wp-block-table-of-contents\"><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/14-plugins-for-the-block-editor-gutenberg-20-8-studio-1-15-1-woo-9-9-and-more-weekend-edition-330/#0-word-press-release-information\">Developing Gutenberg and WordPress</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/14-plugins-for-the-block-editor-gutenberg-20-8-studio-1-15-1-woo-9-9-and-more-weekend-edition-330/#0-p\">Plugins, Themes, and Tools for #nocode site builders and owners</a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/14-plugins-for-the-block-editor-gutenberg-20-8-studio-1-15-1-woo-9-9-and-more-weekend-edition-330/#more-single-blocks-and-block-collections-from-the-wordpress-plugin-repository\">More single blocks and block collections from the WordPress plugin repository</a></li></ol></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/14-plugins-for-the-block-editor-gutenberg-20-8-studio-1-15-1-woo-9-9-and-more-weekend-edition-330/#3-building-themes-for-fse-and-word-press\">Building Blocks and Tools for the Block editor.</a></li></ol></nav>\n</div></div>\n</section>\n\n\n<h2 class=\"wp-block-heading\" id=\"0-word-press-release-information\">Developing Gutenberg and WordPress</h2>\n\n\n\n<p><strong>George Mamadashvili</strong> released <a href=\"https://github.com/WordPress/gutenberg/releases/tag/v20.8.0\"><strong>Gutenberg 20.8</strong></a> on May 14, 2025. Here are the features, Ellen Bauer and I discussed on the podcast episode&#8221;</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create block package: added flag for text domain during scaffolding. (<a href=\"https://github.com/WordPress/gutenberg/pull/69802\">69802</a>)</li>\n\n\n\n<li>Guide component customization: next and previous button text. (<a href=\"https://github.com/WordPress/gutenberg/pull/69907\">69907</a>)</li>\n\n\n\n<li>Search functionality for page templates and patterns. (<a href=\"https://github.com/WordPress/gutenberg/pull/69667\">69667</a>)</li>\n\n\n\n<li>Meta box fixes and widget editor locking. (<a href=\"https://github.com/WordPress/gutenberg/pull/69958\">69958</a>)(<a href=\"https://github.com/WordPress/gutenberg/pull/69984\">69984</a>)</li>\n\n\n\n<li>Ability to edit HTML for invalid blocks.(<a href=\"https://github.com/WordPress/gutenberg/pull/69902\">69902</a>)</li>\n\n\n\n<li>Spacer block update preventing negative width in row blocks.(<a href=\"https://github.com/WordPress/gutenberg/pull/68845\">68845</a>)</li>\n\n\n\n<li>Box sizing property updates to prevent design overflow.(<a href=\"https://github.com/WordPress/gutenberg/pull/70014\">70014</a>)</li>\n\n\n\n<li>Block bindings API documentation improvements and limitations.(<a href=\"https://github.com/WordPress/gutenberg/pull/68583\">68583</a>)</li>\n\n\n\n<li>Block Styles:  add copy and code for style_data to documentation (<a href=\"https://github.com/WordPress/gutenberg/pull/69920\">69920</a>)</li>\n</ul>\n\n\n\n<p>The changelog is <a href=\"https://github.com/WordPress/gutenberg/releases/tag/v20.8.0\">available on the GitHub repo</a>. </p>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p><img alt=\"🎙\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f399.png\" style=\"height: 1em;\" /> The latest episode <a href=\"https://gutenbergtimes.com/podcast/gutenberg-changelog-117-woocommerce-starter-theme-and-blocks/\">Gutenberg Changelog 117 – WooCommerce Starter Theme and Blocks, WordCamp Europe, and Gutenberg 20.7 and 20.8</a> I sat down with Ellen Bauer, WooCommerce product lead and discussed what she is working on, WordCamp Europe, Create Block Theme, WP-CLI, Gutenberg 20.7 and Gutenberg 20.8 releases. </p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"Ellen Bauer and Birgit Pauli-Haack recording Gutenberg Changelog 117\" class=\"wp-image-40375\" height=\"184\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2022/03/Screenshot-2025-05-10-at-12.16.57.png?resize=652%2C184&#038;ssl=1\" width=\"652\" /></figure>\n</div></div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0-p\">Plugins, Themes, and Tools for #nocode site builders and owners</h2>\n\n\n\n<p><strong>Mike McAlister</strong> announced <a href=\"https://olliewp.com/the-future-of-wordpress-site-building-starts-with-ollie-pro-2-0/\"><strong>the release of Ollie Pro 2.0</strong></a>. The update introduces a redesigned dashboard, a setup wizard to streamline site configuration, and starter sites, with which users could launch a complete website fast. For developers, a child theme creator is included to enable safe code customizations. The release also expands the pattern library with hundreds of professionally designed layouts and styles, all accessible through an improved pattern browser. </p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"\" class=\"wp-image-40453\" height=\"373\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-12-at-9.11.42%E2%80%AFAM-1536x879-1.webp?resize=652%2C373&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<p><strong>Michael Pretty</strong>, code wrangler at WooCommerce, recently shared some great news: <a href=\"https://developer.woocommerce.com/2025/05/13/woocommerce-9-9-will-deliver-massive-admin-performance-gains/\"><strong>WooCommerce 9.9 will bring significant admin performance improvements.</strong></a> In his post, he outlined the key factors and changes behind faster admin screen rendering and quicker action execution for Woo merchants. These updates promise a noticeably smoother and more efficient experience when managing your store. You can start testing the with the <a href=\"https://developer.woocommerce.com/2025/05/12/woocommerce-9-9-pre-release-updates/\">Woo 9.9 Beta version</a>. WooCommerce 9.9 is scheduled for release on June 2, 2025, just before WordCamp Europe. </p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p>If you often write tutorials with code examples, you need to check out the <strong><a href=\"https://code-block-pro.com/\">Code</a><a href=\"https://wordpress.org/plugins/code-block-pro/\"> Block Pro</a></strong> plugin by <strong>Kevin Batdorf</strong>. You can make your code look as beautiful as the rest of your site. The plugin offers dozens of different themes, and specific syntax highlighting for hundreds of programming languages. If you feel the code section gets too long with the “Click to see more” feature, you can collapse code blocks at any line, letting visitors expand only what they need. Also, very handy are line highlighting and blurring of surrounding code, which helps readers to quickly recognize the code section that you want them to focus on. I’ve only scratched the surface of what Code Block Pro can do in my own posts. You can get the plugin <a href=\"https://wordpress.org/plugins/code-block-pro/\">from the WordPress repository</a>.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#second-task-update-theme-json\"><img alt=\"\" class=\"wp-image-40456\" height=\"368\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-15-at-15.03.42.png?resize=652%2C368&#038;ssl=1\" width=\"652\" /></a><figcaption class=\"wp-element-caption\"><a href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#second-task-update-theme-json\">Screenshot from my post on Block Theme building.</a> </figcaption></figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p>In her latest tutorial, <strong>Anne Katzeff </strong>explored <a href=\"https://www.askdesign.biz/blog/2025/05/layout-and-design-with-row-and-stack-blocks/\"><strong>how the Row and Stack blocks expand the layout and design</strong></a> possibilities for your site. She discusses all the different settings, and styles options for these Group block variations.  </p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot from Anne Katzeff\'s tutorial with her amazing art! \" class=\"wp-image-40481\" height=\"390\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-16-at-14.10.48.png?resize=652%2C390&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong>Hans-Gerd Gerhards</strong> introduced his <strong><a href=\"https://haurand.com/plugin-shrinking-logo-sticky-header/\">&#8220;Plugin Shrinking Logo Sticky Header”</a></strong>. The plugin lets you &#8220;add a modern sticky header with smooth, animated shrinking effects for both the header and the site logo.&#8221; You have full control over the heights for default and shrunken states and also use your site&#8217;s colors for styling. The post also entails the link for downloads videos and screenshots. The plugin in in the approval queue for the WordPress directory. </p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"more-single-blocks-and-block-collections-from-the-wordpress-plugin-repository\">More single blocks and block collections from the WordPress plugin repository</h3>\n\n\n\n<p>I am amazed at the creativity of plugin authors to always find missing features to add to WordPress. Some even you didn&#8217;t know you were missing. <img alt=\"🧐\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f9d0.png\" style=\"height: 1em;\" /> Over the last few days,  I found several single blocks and block collections in my RSS Feeds.  I have not tested them.  Use at your own risk. If you do try some, please let me know how it went. <a href=\"mailto:pauli@gutenbergtimes.com\">Email me. </a></p>\n\n\n\n<p><a href=\"https://wordpress.org/plugins/nasio-blocks/\"><strong>Nasio Blocks</strong></a>  by <strong>Nasio Themes</strong> &#8211; A newcomer on the WordPress repository. Welcome to the WordPress space! <img alt=\"👋\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f44b.png\" style=\"height: 1em;\" /> &#8220;Post slider, Content slider, Gallery slider, Accordion and Icon blocks. Features a template library with predefined demo content (block patterns) to speed up the page creation process.&#8221; so they say. </p>\n\n\n\n<p><strong><a href=\"https://wordpress.org/plugins/flipbox-block/\">Flipbox Block</a> by <a href=\"https://gutenbergkits.com/\">GutenbergKits</a></strong> &#8220;Flip box Block &#8211;  &#8220;A flip box is an interactive UI element that flips between two sections on hover or click.&#8221; and &#8220;You can create unlimited design possibilities&#8221;. I remember when I build such a flip box w/ vanilla JavaScript in a static HTML page for a memory game some time in the early 2000s. Now I just can install a block for it.</p>\n\n\n\n<p><a href=\"https://wordpress.org/plugins/photo-block/\"><strong>Photo Block</strong></a> by <a href=\"https://x.com/ronaldhuereca\"><strong>Ronald Huereca</strong></a>, in his 20th year of his WordPress.org account. <img alt=\"🎉\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f389.png\" style=\"height: 1em;\" /> He built into it advanced image customization, full caption support, responsive styling, and global styles. Alone from the screenshots on the plugin page I feel a bit overwhelmed with the vast number of customizations.You&#8217;ll find a ton of filters, too. To see it in action, you can <a href=\"https://app.instawp.io/launch?t=photo-block&amp;d=v2\">spin up a demo site</a></p>\n\n\n\n<p><a href=\"https://wordpress.org/plugins/pibe-parallax-image-block-and-effects/\"><strong>PIBE – Parallax Image Block and Effects</strong></a> by <strong>Emiliano Lorenzi,</strong> also a newcomer to the space! Welcome to you, too! <img alt=\"👋\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f44b.png\" style=\"height: 1em;\" /> His plugin &#8220;allows you to add modern, animated images to your site, whether you want to add depth with parallax, capture your visitors’ attention with hover transitions, or highlight content with stylish overlays.</p>\n\n\n\n<p><strong>Bhargav (Bunty) Bhandari,</strong> WordPress developer author of the <a href=\"https://wordpress.org/plugins/thread-block/\">Thread</a> and <a href=\"https://wordpress.org/plugins/polls-block/\">Polls</a> blocks, has released a new plugin called: <strong><a href=\"https://wordpress.org/plugins/explicit-media-block/\">Explicit Media Block</a></strong>. This block is an image/media block public likes and shareable links, turning your site into an interactive content hub, Instagram like as you so will.</p>\n\n\n\n<p><a href=\"https://wordpress.org/plugins/primekit-blocks/\"><strong>Primekit Blocks</strong></a> by <strong>SupreoX Limited</strong> with contains three blocks. The most intriguing would be for me the Animated Text Block to show for animated text effects for your headings and content. The other two are Call to Action (CTA) block and a Copyright block. </p>\n\n\n\n<p><strong><a href=\"https://wordpress.org/plugins/groundworx-carousel/\">Groundworx Carousel</a></strong> by <a href=\"https://x.com/groundworxdev\"><strong>Johanne Courtright</strong></a>, a longtime WordPress developer and freelancer from the US, published her first plugin in the repository. With the carousel, built with native core blocks,  you can display slides with any inner blocks. Using the Splide.js library it supports responsive options, breakpoint-based layouts, and advanced design controls. On GitHub, Courtright also provides <a href=\"https://github.com/groundworx-dev/groundworx-carousel#example-variations\">instructions and code examples</a> on how to extend the plugin to fit any site&#8217;s needs. </p>\n\n\n\n<p><a href=\"https://wordpress.org/plugins/better-navigation-block-styles/\"><strong>Better Navigation Block Styles</strong></a> by <a href=\"https://x.com/marctv\"><strong>Marc Tönsing</strong></a>. Tönsing aims to refine the native mobile menu with to ensure better spacing, alignment, and readability by injecting Additional CSS. </p>\n\n\n\n<p><a href=\"https://wordpress.org/plugins/ghostlabs-cycle-block-lite/\"><strong>Cycle Block: Lite</strong></a> by <b>Ghos</b><strong>t Labs</strong>, also a newcomer to the WordPress repository, Welcome! <img alt=\"🎉\" class=\"wp-smiley\" src=\"https://s.w.org/images/core/emoji/15.1.0/72x72/1f389.png\" style=\"height: 1em;\" /> The team&#8217;s first plugin enables user to display different content for each page load. You can rotate headlines, and create randomized call-to-actions. The description and screenshot offer more use cases where this plugin might be helpful.  On their website you find a few more plugins: City blocks for location-based content and Ghostwriter block, using AI for content creation. </p>\n\n\n\n<p><strong><a href=\"https://wordpress.org/plugins/wpmozo-blocks-and-addons/\">WPMozo Blocks and Addons</a></strong> by <a href=\"https://elicus.com/about-us/\"><strong>Elicus</strong></a> provides plenty of Custom blocks to use, a few sliders, a flip box, tilt image, before-and-after comparisons block. You can see it all in action on <a href=\"https://wpmozoblocks.com/\">the demo site.</a> I found the <a href=\"https://wpmozoblocks.com/interactive-image-card/\">interactive image card</a> to be quite interesting. The <a href=\"https://wpmozoblocks.com/separator/\">Separator block</a> is probably one I would use if I had to spruce up a wall of text or so. </p>\n\n\n\n<p>Which reminds me: On the WordPress Developer blog, <strong>Justin Tadlock</strong> wrote a tutorial about <a href=\"https://developer.wordpress.org/news/2023/07/beyond-block-styles-part-2-building-a-custom-style-for-the-separator-block/\"><strong>Building a custom style for the Separator block</strong></a>, just in case you are tempted to get into block style building without creating a Custom block. </p>\n\n\n\n<p>That&#8217;s it for now. Please keep in mind that I don&#8217;t have any aspiration to be comprehensive when curating plugins. I would also be delighted, if you want to <a href=\"mailto:pauli@gutenbergtimes.com\">email me</a> asking me to check out your plugin. </p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n<section class=\"wp-block-newsletterglue-callout undefined not-color-set\" style=\"border-color: #f9f9e5; border-radius: 22px; border-style: solid; border-width: 0; padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px; text-align: left; margin-left: 0; margin-right: 0; margin-top: 0px; margin-bottom: 0px; background-color: #f9f9e5;\">\n<p><strong> <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/\" rel=\"noreferrer noopener\" target=\"_blank\">&#8220;Keeping up with Gutenberg &#8211; Index 2025&#8221;</a> </strong><br />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: <strong><strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2020/\">2020</a> | <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2021/\">2021</a></strong> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/keeping-up-with-gutenberg-index-2022/\">2022</a></strong></strong> | <strong><a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2023\">2023</a></strong> | <a href=\"https://make.wordpress.org/core/handbook/references/keeping-up-with-gutenberg-index/gutenberg-index-2024/\"><strong>2024</strong></a></p>\n</section>\n\n\n<h2 class=\"wp-block-heading\" id=\"3-building-themes-for-fse-and-word-press\">Building Blocks and Tools for the Block editor.</h2>\n\n\n\n<p><strong>Felix Arntz,</strong> a developer at Google and the author of the <a href=\"https://wordpress.org/plugins/ai-services/\">AI services plugin</a>, has authored a tutorial detailing the process by which individuals can utilize this plugin to create artificial intelligence tools, such as <a href=\"https://felix-arntz.me/blog/writing-a-wordpress-plugin-to-generate-image-alt-text-with-ai-services/#more-1987\">an image alt text generator</a>.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><a href=\"https://bsky.app/profile/2ndkauboy.bsky.social\"><strong>Bernhard Kau</strong></a> published a tutorial on <a href=\"https://kau-boys.com/4107/wordpress/adding-a-custom-panel-to-query-monitor\"><strong>how to add a custom panel to Query Monitor</strong></a>. Query Monitor should be in every WordPress developer toolbox, and how to customize it is a very useful skill to have. <br /></p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p class=\"has-small-font-size\">In last week&#8217;s live stream, <strong>Jonathan Bossenger</strong> explored <a href=\"https://www.youtube.com/watch?v=AwxE-R7OsVU\"> how to use the Feature API</a>. He figured out how to hook up Woo&#8217;s LMS, Sensei and register its lessons as tools. Then he instructed an AI agent to create a lesson from a markdown file. </p>\n\n\n\n<p class=\"has-normal-font-size\">Automattic introduced a<a href=\"https://github.com/Automattic/wp-feature-api\"> new Feature API</a> for WordPress. It allows AI agent tools to interact with sites in more structured ways—unlocking new possibilities for plugins and automation.</p>\n\n\n\n<p class=\"has-small-font-size\"><strong>Jamie Marsland</strong> posted on LinkedIn, why that&#8217;s important: <a href=\"https://www.linkedin.com/pulse/wordpress-sitting-goldmine-feature-api-just-dug-first-jamie-marsland-3sije/?trackingId=qVLCTVZZSniPqxIiHZRpdQ%3D%3D\"><strong>WordPress Is Sitting on a Goldmine — And the Feature API Just Dug the First Tunnel</strong></a></p>\n\n\n<div class=\"wp-block-newsletterglue-showhide ng-block\" width=\"100%\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\n</div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p><strong>Nick Diego</strong> has tested the latest Studio v 1.5.1, the new local development app by WordPress.com, release and wrote a tutorial on how to use the new features: <a href=\"https://wordpress.com/blog/2025/05/12/preferences-studio/\"><strong>Customize Your WordPress Development Workflow: New Preferences in Studio</strong></a>. I made Studio my only local development tool installed.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n<section class=\"wp-block-newsletterglue-callout undefined not-color-set\" style=\"border-color: #eeeeee; border-radius: 26px; border-style: solid; border-width: 0; padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px; text-align: left; margin-left: 0; margin-right: 0; margin-top: 0px; margin-bottom: 0px; background-color: #f3efe9;\">\n<p><strong><a href=\"https://gutenbergtimes.com/need-a-zip-from-master/\">Need a plugin .zip from Gutenberg&#8217;s master branch?</a></strong><br />Gutenberg Times provides daily build for testing and review. </p>\n\n\n\n<p>Now also available via <a href=\"https://playground.wordpress.net/?blueprint-url=https://gutenbergtimes.com/wp-content/uploads/2020/11/playnightly.json\">WordPress Playground</a>. There is no need for a test site locally or on a server. Have you been using it? <a href=\"mailto:pauli@gutenbergtimes.com\">Email me </a>with your experience</p>\n\n\n\n<p><img alt=\"GitHub all releases\" src=\"https://img.shields.io/github/downloads/bph/gutenberg/total?style=for-the-badge\" /></p>\n</section>\n\n\n<p class=\"has-text-align-center has-small-font-size\"><em>Questions? Suggestions? Ideas? </em><br /><em>Don&#8217;t hesitate to send <a href=\"mailto:pauli@gutenbergtimes.com\">them via email</a> or</em><br /><em> send me a message on WordPress Slack or Twitter @bph</em>.</p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" />\n\n\n\n<p class=\"has-text-align-center has-small-font-size\">For questions to be answered on the <a href=\"http://gutenbergtimes.com/podcast\">Gutenberg Changelog</a>, <br />send them to <a href=\"mailto:changelog@gutenbergtimes.com\">changelog@gutenbergtimes.com</a></p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n<section class=\"wp-block-newsletterglue-group\" style=\"padding-top: 10px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; margin-top: 0px; margin-bottom: 0px;\">\n<p>Featured Image: Photo by Fran Jacquier on Unsplash</p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity is-style-wide\" />\n\n\n\n<p class=\"has-text-align-left\"><strong>Don&#8217;t want to miss the next Weekend Edition? </strong></p>\n\n\n<form action=\"https://gutenbergtimes.com/feed/\" autocomplete=\"on\" class=\"wp-block-newsletterglue-form ngl-form ngl-portrait\" method=\"post\"><div class=\"ngl-form-container\"><div class=\"ngl-form-field\" style=\"margin-bottom: 25px;\"><label class=\"ngl-form-label\" for=\"ngl_email\"><br />Type in your Email address to subscribe.</label><div class=\"ngl-form-input\"><input autocomplete=\"email\" class=\"ngl-form-input-text\" id=\"ngl_email\" name=\"ngl_email\" required=\"required\" style=\"border-radius: 21px;\" type=\"email\" /></div></div><button class=\"ngl-form-button\" style=\"background-color: #005075; border-color: #005075; border-width: 1px; border-style: solid; color: #ffffff; border-radius: 21px;\" type=\"submit\">Subscribe</button><p class=\"ngl-form-text\">We hate spam, too, and won&#8217;t give your email address to anyone <br />except Mailchimp to send out our Weekend Edition</p></div><div class=\"ngl-message-overlay\"><div class=\"ngl-message-svg-wrap\"><svg fill=\"none\" height=\"24\" stroke=\"#fff\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg></div><div class=\"ngl-message-overlay-text\">Thanks for subscribing.</div></div><input id=\"ngl_list_id\" name=\"ngl_list_id\" type=\"hidden\" value=\"26f81bd8ae\" /><input id=\"ngl_double_optin\" name=\"ngl_double_optin\" type=\"hidden\" value=\"yes\" /></form>\n\n\n<hr class=\"wp-block-separator has-css-opacity is-style-wide\" />\n</section>\";s: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, 17 May 2025 05: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: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: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:63:\"Do The Woo Community: Why Contributor Day in Basel is a Must-Do\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=96961\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"https://dothewoo.io/blog/why-contributor-day-in-basel-is-a-must-do/\";s: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:168:\"Contributor Day at WordCamp Europe 2025 is a community event on June 5th in Basel, Switzerland, encouraging contributions to the WordPress project for all skill levels.\";s: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, 16 May 2025 07:41: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:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";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:41:\"Matt: Jony Ive &amp;amp; Patrick Collison\";s:7:\"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=142505\";s:7:\"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/05/jony-ive/\";s: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:233:\"<p>A really beautiful interview.</p>\n\n\n\n<figure class=\"wp-block-embed alignwide is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n</div></figure>\";s: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, 16 May 2025 00:08:37 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s: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: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:108:\"Do The Woo Community: Lessons Learned From 15 Years of Building Complex WooCommerce Sites with Matt Schwartz\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=96975\";s:7:\"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://dothewoo.io/lessons-learned-from-15-years-of-building-complex-woocommerce-sites-with-matt-schwartz/\";s: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:241:\"In Woo AgencyChat, host Robert Jacobi chats with Matt Schwartz from Inspry about their journeys in WordPress, WooCommerce insights, lessons in agency growth, and the importance of educating clients on Woo\'s capabilities and responsibilities.\";s: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, 15 May 2025 08:57: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:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Bob Dunn\";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:97:\"WPTavern: #169 – Wes Tatters on the Evolution of Internet Communities and WordPress Open Source\";s:7:\"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=195791\";s:7:\"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://wptavern.com/podcast/169-wes-tatters-on-the-evolution-of-internet-communities-and-wordpress-open-source\";s: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:49601:\"<details>Transcript<div>\n<p>[00:00:19] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.</p>\n\n\n\n<p>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 a personal journey through the history of the internet from start to now.</p>\n\n\n\n<p>If you&#8217;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 wp tavern.com/feed/podcast, and you can copy that URL into most podcast players.</p>\n\n\n\n<p>If you have a topic that you&#8217;d like us to feature on the podcast, I&#8217;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.</p>\n\n\n\n<p>So on the podcast today, we have Wes Tatters. Wes has been immersed in the tech space for close to four decades, starting his journey with early computers like the Commodore 64 and TRS 80. He&#8217;s been an author, with multiple books on internet technologies to his name, has worked across AV and media, and today he&#8217;s the driving force behind Rapyd Cloud, a globally distributed hosting company. Wes&#8217; perspective is shaped as much by his hands-on experience building communities on CompuServe, AOL and MSN, as by his deep involvement with modern open source platforms like WordPress.</p>\n\n\n\n<p>Wes starts off by sharing some of the fascinating stories from the early web, when getting online meant stringing together modems and bulletin boards, and long distance communication felt nothing short of miraculous. He talks about the evolution of the internet as a space for community, and how chance encounters in early online forums led to opportunities like writing for Netscape and shaping the very first JavaScript Developer Guides.</p>\n\n\n\n<p>We then discuss the changing meaning of community across different eras of the internet, touching on the shift from closed walled gardens, like AOL, to the open source ethos that powers projects like WordPress, and much else that we take for granted online. Wes describes how WordPress&#8217; flexibility and openness allowed anyone, anywhere, to claim their own piece of the web without technical barriers, and how this has contributed to its rise as a cornerstone of global digital freedom and self-expression.</p>\n\n\n\n<p>Our conversation also examines the challenges, and potential missteps, of the modern internet from social loneliness, to the commercial world of social media. And reflects on WordPress&#8217;s role in helping steer a path back to more positive, open, and empowering online experiences.</p>\n\n\n\n<p>If you&#8217;re interested in how the history of the internet directly shaped WordPress, the Open Web, and the communities we build today, this episode is for you.</p>\n\n\n\n<p>If you&#8217;d like to find out more, you can find all of the links in the show notes by heading to wp tavern.com/podcast, where you&#8217;ll find all the other episodes as well.</p>\n\n\n\n<p>And so without further delay, I bring you Wes Tatters.</p>\n\n\n\n<p>I am joined on the podcast today by Wes Tatters. Hello, Wes.</p>\n\n\n\n<p>[00:03:50] Wes Tatters: Nathan, good to be talking together again.</p>\n\n\n\n<p>[00:03:53] Nathan Wrigley: I&#8217;ve got to be very, very, accommodating of Wes&#8217; time, because for me it&#8217;s about four in the afternoon, something like that. Wes, on the other side of the planet, is giving up his time at about one in the morning. I have no idea why you are here, but I appreciate it. Thank you.</p>\n\n\n\n<p>[00:04:07] Wes Tatters: Oh look, my day tends to be largely focused on talking to people in Europe, and in the United States. Half my employees are in those parts of the world as well. So I tend to work midnight to midnight. And we&#8217;re in the middle of a big product launch, for Rapyd, which has meant we&#8217;re just talking, and being visible, and I&#8217;m awake and happy to chat.</p>\n\n\n\n<p>[00:04:25] Nathan Wrigley: So you literally pivot your day, your Australian day, you pivot it so that you are available for North American and European customers. So we should probably say you work for a hosting company called Rapyd Cloud, And that&#8217;s where the thrust of your marketing endeavors go. So you pivot your day?</p>\n\n\n\n<p>[00:04:41] Wes Tatters: Yeah, like about, I think about 60% of our customers are in the United States, and about 30, 45, 35 are in Europe, and 5% or something in Asia, Which is pretty generic for the WordPress space. Our focus is around obviously those markets, but also because we&#8217;re a global company, we don&#8217;t have a head office.</p>\n\n\n\n<p>Everyone who works in our team is doing it remotely. It might be Dubai, or Chicago or the Philippines or Pakistan, India. So we choose times of the day, we have this great calendar and for every meeting we post up a list of all the times, and then there&#8217;s happy faces, red faces and smiley faces. And someone will go, all right, I&#8217;ll take the red face. That&#8217;s the nature of WordPress though.</p>\n\n\n\n<p>[00:05:21] Nathan Wrigley: Yeah, madness though, when you think about it. If you were to rewind the clock 30 years none of this was possible. I mean here, I am talking you through a web browser, as if it&#8217;s nothing, and it is utterly remarkable. And actually that&#8217;s going to be the thrust of this conversation, I think. We&#8217;re going to trace the WordPress community in particular, not just the community, the software and what have you, over the period of time it&#8217;s been in existence, 21 years odd.</p>\n\n\n\n<p>So, do you want just give us your backstory, specifically I guess around WordPress, but just generally in tech? Because I know you&#8217;ve done quite a lot of other AV related things as well.</p>\n\n\n\n<p>[00:05:54] Wes Tatters: I&#8217;ve, been in the tech space for close to 40 years. I was trying to work it out a little while ago, and it&#8217;s like, I remember my first computer. It was a Commodore 64 or something, or a TRS 80, or something like that. And I would&#8217;ve been 16 or 17, and even then it was like, I was programming them, not playing games on them. I enjoyed programming and coding.</p>\n\n\n\n<p>So I started very early in the tech space, but as a result of which, even modems didn&#8217;t really exist when I first started in the IT space. Laptops and PCs and computers and certainly iPhones and all that wonderful technology we have today didn&#8217;t exist.</p>\n\n\n\n<p>But there was already people in the space at places like DARPA, that were going, how do we connect the world? It was a government military strategy. How do we connect the world in the event of a nuclear war? That was the driving mentality behind what they were planning. It was originally going to be a network of radio towers sending, a bit like we had with the old modems, the buzzing noises.</p>\n\n\n\n<p>But it was this whole concept of, how do we build a disconnected system that can survive massive breakdowns in the structure of communication? And a part of what they build, ironically, is what makes the internet so powerful these days. It&#8217;s that ability to interconnect disparate technologies, disparate systems, all different types of capabilities and devices and all those sorts of things, in ways that are transparent.</p>\n\n\n\n<p>As you just said, we&#8217;re in two parts of the world and we are talking together in real time. I grew up in the, as a part of my life, in the media world, and film and television and primarily television. In a point in time where if we wanted to conduct a live interview with someone on the other side of the world, firstly, we had to book satellite space in the thousands of dollars per minute almost. And then we would go, Nathan, are you there?</p>\n\n\n\n<p>And Nathan would come back four seconds later, and we would conduct these really bizarre interviews, with delays on this crazy technology. So much so that when live television was first starting, obviously there was a big fear that someone would say naughty words, or swear on television for the want of a better word. And one of the early ways that they originally managed, we have what&#8217;s called, a lot of television stations had this big red button called a dump button.</p>\n\n\n\n<p>The whole idea was someone said f, someone had to slam the big dump button. But the way they we&#8217;re actually handling it was they were actually sending the entire signal up to a satellite and back down to the ground station before they transmitted it. Because that gave them roughly two or three seconds of delay, which gave them the ability for that big red button to stop the transmission point. But the signal had gone up and down through a satellite just to even achieve that craziness.</p>\n\n\n\n<p>I came into that world, and started in that world. I was incredibly lucky that I lucked into an IT firm, here in Australia, that was at that stage of company that doesn&#8217;t even exist anymore. It&#8217;s a company called Wang Microsystems. Dr. Wang was the guy that invented the first memory ship, so he, he&#8217;s reasonably well healed, but that entire platform doesn&#8217;t exist. But Wang was one of the first it companies to release a processor with a box. There was this three racks that was a modem.</p>\n\n\n\n<p>300 characters per second. It was bleedingly fast. But for, its time, and I was one of the first people that got to play with one of those things in Australia. And I&#8217;ll tell you what, I was hooked. I just went, even then I could go, oh my goodness. There were dreams of we can make it faster.</p>\n\n\n\n<p>And we got 1200 baud, and then we got 1600 baud, and then we got 3,200 baud and 56 k. And every bit was exciting. Because what it was allowing me as a person to do, especially a person in Australia, was to reach out and communicate with people that weren&#8217;t in my part of the world. And we had things like America Online, well CompuServe first, I guess prior to America Online.</p>\n\n\n\n<p>We had bulletin boards and local BBS software and things like that. And all of them were creating communities. All of them were starting to build communities around this same space. It was something that I really engaged with.</p>\n\n\n\n<p>When I got into CompuServe though, it for me changed a lot of things. Because until that stage it was hard to communicate with anyone outside Australia. But with CompuServe, all of a sudden, I was connected to people around the world.</p>\n\n\n\n<p>[00:10:37] Nathan Wrigley: What did that connection actually feel like though? Was it literally, you&#8217;d type something, and was it you&#8217;d leave the computer, like the email sort of exchange?</p>\n\n\n\n<p>[00:10:46] Wes Tatters: They were really very, very similar to an early sort of discussion board. People would leave comments, and people would make comments back and respond, and people built relationships and discussions were built. And in my early life I was an author. I&#8217;ve written a number of books on internet technologies.</p>\n\n\n\n<p>This is the guy in Brisbane, Australia, who happened to luck into a forum on CompuServe with a guy named Mark Tabor, who was the head of publishing acquisitions for Schuster and Schuster, which is McMillan, and sams.net, the biggest publisher on the planet.</p>\n\n\n\n<p>And Mark was going, we are looking for authors to write in this space. They were releasing a new imprint at the time called sams.net, which was going to be like. Theirs was Teach Yourself series.</p>\n\n\n\n<p>They were building it at McMillan, and their biggest problem was respectfully that IT people don&#8217;t make good writers. Love us, or like us, we don&#8217;t even like writing comments in code, let alone knocking out 4 or 500 pages of a book, to tell someone how to do something.</p>\n\n\n\n<p>But that ability to be in a community outside of my own space, this is me in Brisbane, Australia, talking to the head of acquisitions for Macmillan, going, yeah, I can write a book. I&#8217;d already been doing some writing. I had, as I said from, because I have a media background, I&#8217;d been writing for magazine articles in Australia, and I&#8217;d been involved in communications and had some journalism experience, so I was kind of already in the space.</p>\n\n\n\n<p>And yeah, the book got written. We actually wrote a book that told people how to connect CompuServe to the internet, because previously CompuServe couldn&#8217;t be connected to the internet.</p>\n\n\n\n<p>[00:12:21] Nathan Wrigley: Do you remember those times like halcyon day&#8217;s, rose tinted spectacles. Because that was real pioneering stuff. The idea that, okay, so dear listener, if you are under the age of 30, your world was entirely connected from the moment you could conceive a thought. In some respect you could turn the tele on and be live tele from around the globe. You may not have had internet access.</p>\n\n\n\n<p>[00:12:44] Wes Tatters: I remember trying to explain to my parents what I was doing, and they were looking at me going, you&#8217;re doing what? And it wasn&#8217;t until the first book, 500 pages, 50 copies arrived in a box from McMillan, that the lights went on in parents&#8217; head who went, okay.</p>\n\n\n\n<p>[00:13:04] Nathan Wrigley: There&#8217;s something in this.</p>\n\n\n\n<p>[00:13:05] Wes Tatters: This is odd. And we sold hundreds of thousands of copies of edition of these books. I wrote the same book for America Online.</p>\n\n\n\n<p>The joke was America Online actually wasn&#8217;t even in Australia at that stage, which was interesting. But it gave me lots of opportunities, and this was about communities. This was about getting into communities. While I was in that community, talking, working with the a AOL team on how they were going to connect to this thing called the internet. There was a little crowd called Netscape banging around, going hey, love what you did, Tim. Love that original browser. We&#8217;re going to build a better one.</p>\n\n\n\n<p>[00:13:37] Nathan Wrigley: An open one.</p>\n\n\n\n<p>[00:13:38] Wes Tatters: An open one. And the Netscape guys had seen my books, came to my publisher and said, hey, could we do a book with Wes on how to write, how to build websites for Netscape? So we wrote six books for Netscape over the next five years, going teach yourself HTML development for Netscape. So community was the whole basis of it.</p>\n\n\n\n<p>[00:14:03] Nathan Wrigley: It&#8217;s so curious that for people that are born in the last, like I said, 20 years or so, the internet has just been a feature of their life, almost like a utility. Almost in certain parts of the world, like a human right. You might even describe it on that level.</p>\n\n\n\n<p>This conduit of information that can come in. This capacity to talk to people, any point on the globe almost immediately with almost zero cost. And in the time that you are describing just the merest foundations of that were beginning. Little glimmers of that would beginning to emerge.</p>\n\n\n\n<p>[00:14:34] Wes Tatters: Really edge.</p>\n\n\n\n<p>[00:14:35] Nathan Wrigley: Really interesting though. I can imagine your passion and interest and all of that must have been. The curiosity that was spiked by that.</p>\n\n\n\n<p>[00:14:42] Wes Tatters: It was. I loved it. But even then, we still didn&#8217;t truly understand where it was going.</p>\n\n\n\n<p>I remember a call from the team at Netscape going, it was around, I think it was around version three of the Netscape. Going we&#8217;ve got this idea we&#8217;re going to, we&#8217;re going to put a scripting thing in Netscape. What do you think? And I&#8217;m going, yeah. What do you mean? What do you think? We need you to include it in the next book. It&#8217;s this little thing called JavaScript.</p>\n\n\n\n<p>[00:15:04] Nathan Wrigley: Just little thing.</p>\n\n\n\n<p>[00:15:06] Wes Tatters: And I remember sitting there going, interesting idea. Can you tell me more about what it can do? And they went, we don&#8217;t really know yet. We&#8217;re still working on those bits. So we ended up writing the first JavaScript development guide, me and my technical writer, who was my technical editor for my Netscape books. And I wrote the first JavaScript Developers Guide for Netscape.</p>\n\n\n\n<p>So we were there in the middle of it, but all the way through, we still didn&#8217;t truly get it. It was still such this small thing. I was talking with Bud.</p>\n\n\n\n<p>[00:15:37] Nathan Wrigley: Bud Kraus.</p>\n\n\n\n<p>[00:15:38] Wes Tatters: Yeah, I was talking with Bud at PressConf, and we were chatting about just the way the internet&#8217;s evolved. I had the opportunity to meet Tim Burnes Lee.</p>\n\n\n\n<p>[00:15:46] Nathan Wrigley: Nice, the Godfather.</p>\n\n\n\n<p>[00:15:48] Wes Tatters: The Godfather of the internet. And listening to Tim talking about his dream of the internet and the worldwide web, this was a worldwide web conference seven, which was back before WordCamps. It was, that was what a WordCamp looked like before it was WordPress. And I look back and I was thinking, and I&#8217;m going, there were some serious names at that event. Tim Burnes Lee was there. James Gosling, the founder of Java, was there.</p>\n\n\n\n<p>And these were guys doing for the want of a better WordCamp style sessions, chatting about these ideas they&#8217;ve had. Seeing even then that what the worldwide web, and what we&#8217;ve grown into with WordPress had the potential to be, was entirely different to the way the world thought before that.</p>\n\n\n\n<p>I remember there was like, I think it was the Friday night. I actually ran the media for that particular conference, that was held in Australia. It was the first time being held out of the northern hemisphere. But no fully explained reason, it was being held in Australia, in my hometown, and I ran all the media for it.</p>\n\n\n\n<p>And I remember some guys, they had this sort, they were going to create this shoe library, it was like, this is the early web. Who knows what we&#8217;re going to do with it? We want a shoe library.</p>\n\n\n\n<p>[00:17:00] Nathan Wrigley: A shoe library, yeah.</p>\n\n\n\n<p>[00:17:01] Wes Tatters: They taking photographs of people&#8217;s shoes, and I remember it was like 7:30 on a Friday night, and Tim&#8217;s in a pair of slacks and a t-shirt. Taking his shoes off so that they could photograph his shoes, so that his photograph of his shoes could go into the shoe library.</p>\n\n\n\n<p>[00:17:19] Nathan Wrigley: Of course.</p>\n\n\n\n<p>[00:17:20] Wes Tatters: And this is the guy that invented the thing that we all live on. This is the father of everything we do today. But even then, he was this amazingly humble person, that was happy to have a chat with a bunch of kids and take photos of his shoes. It&#8217;s a different world.</p>\n\n\n\n<p>[00:17:38] Nathan Wrigley: When you are where you&#8217;re at. So in the year 2025, we&#8217;re concerned about the internet now. And so the way it ended up is how it now is. And honestly, it&#8217;s not one of those things that you pick apart, as like what is the history? What were the dominoes that fell to make the internet, what it now is?</p>\n\n\n\n<p>Like, history, politics and warfare, and all of those kind of things get dealt with by historians. The migration of people over great land masses, all of the kings, queens, all of that.</p>\n\n\n\n<p>But this, this kind of doesn&#8217;t, and it&#8217;s fascinating to listen to you there, because it feels like it could have gone in so many different directions. Maybe would&#8217;ve been a more AOL type thing, where everything was closed and you had to buy into AOL, and everything was handled by AOL. It didn&#8217;t turn out that way. Open won. I&#8217;m not entirely sure that we didn&#8217;t swing back to closed with things social media?</p>\n\n\n\n<p>[00:18:29] Wes Tatters: One of the things that caused that was the people who started using the technology that DARPA invented first, and it was universities.</p>\n\n\n\n<p>[00:18:41] Nathan Wrigley: Oh, interesting. That was the client base, wasn&#8217;t it? It was the academics.</p>\n\n\n\n<p>[00:18:44] Wes Tatters: It was the academics. So Tim&#8217;s original agenda was to obviously create a way to communicate with all the scientists in Cern what was happening in the accelerator that was sitting under three countries. Even then it was about community and communication. But as it&#8217;s walked forward, I look at the whole journey of the internet and at every point community has been a part of that.</p>\n\n\n\n<p>The ability to share things. The whole basis of what we have today in open source, moving towards WordPress, is about communication. So you can&#8217;t have open source without a group of people coming together to collaborate on a project as large as WordPress, or as large as, Linux or as large as Drupal, or as large as all of these other projects. And they&#8217;re not being paid for the most part.</p>\n\n\n\n<p>They&#8217;re doing it because of community, and the underlying technology behind that obviously is the internet. And more insignificantly since then this thing called the World Wide Web that Tim originally envisaged as a tool for sharing.</p>\n\n\n\n<p>[00:19:56] Nathan Wrigley: Yeah. But just tool for sharing with a handful of academics, and then it just grew exponentially. Do you remember the first time that the internet became more social. No, let me rephrase that. Do you remember when the internet shifted from something which a few people did? To something where, not the majority, but it was like hard to ignore at that point. Because definitely as a child have a of no internet.</p>\n\n\n\n<p>[00:20:20] Wes Tatters: Done badly, but Microsoft MSN. Windows 95 was the watershed. So Windows 95 launched, and for the first time, anyone, in inverted commas, with a modem didn&#8217;t need to know someone at a university. Didn&#8217;t need to know how to hard wire AOL to connect to something else. They could literally go get me on the internet, and it happened. So that was the watershed moment.</p>\n\n\n\n<p>Now, MSN as a platform also was heavily driven by community. And again, like it or love them, the original version of Messenger, an embarrassing mess, but it started the concept of community. The original version of MSN was a place where you could go and chat. Their design philosophies around. I remember, in Australia, 9 MSN was, the branding of it. 9 here is our major television network, and they partnered with MSN, in Microsoft and Australia and our major telco to bring MSN to Australia. But it was heavily geared around building communities. And I was quite active in that MSN community in Australia.</p>\n\n\n\n<p>We used to do things like popular TV shows would go to air, and then we would host forums where the actor, or the presenter, or someone from the show would hop literally straight off, the show would end at 9:30, and they would be in a forum going, and hey, tonight we&#8217;ve got insert name of whoever it is.</p>\n\n\n\n<p>And people could ask them questions. And we curated it. I was a part of the curations team at 9 MSN at that stage. And, again, it was using this crazy technology to build community, and to expand communities.</p>\n\n\n\n<p>Now for that network they were using as just obviously a marketing tool, but what it was doing underneath it was again, building this ethos of communities and spaces.</p>\n\n\n\n<p>We then have obviously Facebook that took that and ran with it in crazy directions, and commercialized it. But underneath it we&#8217;re still this open source thing. There&#8217;s still whole open source community.</p>\n\n\n\n<p>[00:22:31] Nathan Wrigley: Do you remember the moment as well when the internet went more from a consumption kind of thing? So you know, you would log onto somebody else&#8217;s property, MSNs Messenger or whatever it may be. I do remember that, by the way. To I can own a bit of the web, a bit of that whole thing can be something that I am in control of. And now we move towards CMSs I guess.</p>\n\n\n\n<p>[00:22:51] Wes Tatters: So this is probably 98 initially. So we were still writing books and Netscape was still trying to work out what they were doing in the world. And, Tim was, Tim was out telling people how big the internet could be. And I remember lots and lots of people, as I said, James Gosling&#8217;s come down, Tim Berners Lee&#8217;s come. The BBC had flown two camera teams, journalists, The Times had flown out people. NBC and CBS had flown out camera crews and to be at this event. Because Sir Tim was becoming Professor Tim at that stage. He was being reordered, a honorary doctorate from an Australian university. It was a big event.</p>\n\n\n\n<p>Could not get a single Australian broadcaster to even show up. Now, put this in perspective. I knew them all. I was actually in that industry. I knew the people. I literally was on the phone to news directors going, dude, just send me one cameraman. Oh, what&#8217;s this thing? What&#8217;s this thing? It was the internet.</p>\n\n\n\n<p>So 95 to 98, it was still a bit hokey. I think where it really started to change though is when things like WordPress started to arrive. Because before that my books on how to build a website, I love meeting people and go, I think I&#8217;ve got your book on a shelf somewhere. It was, and it was always either mine or Laura Lemay&#8217;s.</p>\n\n\n\n<p>Laura and I were both writing in parallel for the same publisher. And some of her chapters are in my books, my chapters in her books. But then it was, we were still hacking HTML. If you wanted to use JavaScript, it wasn&#8217;t jQuery or anything like that. You were writing lines of code and hoping it worked.</p>\n\n\n\n<p>And there were some predecessors and other things. Microsoft had to go at the same thing. Microsoft released a product called ASP, a little thing that.</p>\n\n\n\n<p>[00:24:32] Nathan Wrigley: Oh yeah, that&#8217;s right. Active Server Pages.</p>\n\n\n\n<p>[00:24:35] Wes Tatters: Yeah, and then they released a thing called asp.net, and this wonderful new programming language called C#. And that was their push into this community space. They released open source product with it. They released a product which was called I Buy Spy Portal, which was eventually then forked into a product by a guy named Sean Walker to become a product called DotNetNuke, which was literally their version of WordPress.</p>\n\n\n\n<p>I was there, I know Sean. I was in that space, and we were building communities again, coming outta the Microsoft space on DotNetNuke. At the same time, this little thing called WordPress was happening in parallel. At that stage, ironically, at that stage, I think DotNetNuke was actually more a CMS than WordPress was. Because WordPress was still really a blogging tool. It was still really MySpace for people who actually had a desire to code a bit.</p>\n\n\n\n<p>But I think it was then, that WordPress journey, the arrival of a mechanism that did two things. It allowed you to create a website without knowing how to code, and it allowed you to become a part of something, a community online, where you could all of a sudden reach out of your local neighborhood, your local city, your country, into the rest of the world. And take things to the rest of the world. Sell products to the rest of the world. Communicate to the rest of the world. Share your opinions and thoughts. In the past, you could do that on CompuServe. You could do that on America Online. But in all those places, you didn&#8217;t own your content.</p>\n\n\n\n<p>[00:26:16] Nathan Wrigley: Right, exactly that.</p>\n\n\n\n<p>[00:26:18] Wes Tatters: Even MySpace, sort of like the predecessor to almost Facebook. Facebook groups and forums. None of these spaces you owned your content. And so I think WordPress in its initial incarnation, a blog, was a way for people to start expressing their feelings. And the concept of blogging. And then we started to grow that how do we get our blog to the world? Well, RSS feeds, and then aggregators, and then this wonderful thing called Google came along.</p>\n\n\n\n<p>[00:26:45] Nathan Wrigley: Discoverability.</p>\n\n\n\n<p>[00:26:47] Wes Tatters: Discoverability, and visibility. And all along that journey, there&#8217;s this guy in the states beavering away, we&#8217;re talking about Matt, with a vision of what WordPress could be in that space. And he was creating that in parallel to these communities starting to emerge, to these other companies like Google, and Facebook building closed enclaves.</p>\n\n\n\n<p>Where Matt, obviously very passionate about open source, had a philosophy to build this space that people could use, that people could communicate and share. It was incredibly open. Anyone could write a plugin. Anyone could write a theme. Anyone could decide that they wanted to commercialize that space by selling their theme or selling their plugin.</p>\n\n\n\n<p>Hosting companies could host that platform. So the fact that was such an open product, tweaked something in the consciousness of the time. It tweaked something in that desire to communicate, but also I guess a concept of freedom to communicate.</p>\n\n\n\n<p>Freedom of speech is a passionate position of a lot of countries. The right to freedom of speech, and to a certain extent the right to express an opinion, safely. Or in some cases the rights to communicate in communities.</p>\n\n\n\n<p>I discovered during Covid that the platform that Rapyd grew out of Buddy Boss, which is a social media platform creation tool for WordPress. Install Buddy Boss and you&#8217;ve got your own private Facebook.</p>\n\n\n\n<p>We discovered that there were communities using Buddy Boss to communicate things to their people that they were terrified to communicate on private spaces, like social media or Facebooks. I know people specifically in some of those communities, doctors, other frontline groups and organizations that were facing the real challenges of what was happening in Covid and impacts of those things. They were able to use that gift of community, freely given, freely shared, where you own your raw data in ways that I hadn&#8217;t even considered.</p>\n\n\n\n<p>And for reasons that I hadn&#8217;t even considered. And each time I look at it, people find ways to use community creatively and in incredible ways. And we find that at the core of WordPress.</p>\n\n\n\n<p>[00:29:14] Nathan Wrigley: Yeah, we really do. I remember the first time I ever produced anything online, and it wasn&#8217;t with a CMS, it was just HTML. There was no CSS at the time, it was just tables and things. But I remember publishing that, a friend of mine knew more than I did, and he said, okay, here&#8217;s the environment. Here&#8217;s the text file. Just write it in there and, I&#8217;ll click a button and it&#8217;ll go to some server.</p>\n\n\n\n<p>And then I saw it, saw it on his computer. And then I said to him, but it&#8217;s on your computer. And he said, no, no, no, if you go home, it&#8217;ll be on that computer well.</p>\n\n\n\n<p>[00:29:44] Wes Tatters: And if, you go down the library, or you go up the road, and all you needed to know was where it was.</p>\n\n\n\n<p>[00:29:50] Nathan Wrigley: And I remembered this profound feeling of, what the heck. That&#8217;s so amazing. What, I just put something on your computer, and now anybody in the world should they, discoverability is the big problem, but they could find it. He&#8217;s yeah, that&#8217;s it. That&#8217;s what the internet basically is. And I remember thinking, gosh, what a force for good.</p>\n\n\n\n<p>[00:30:10] Wes Tatters: Huge force for good. Unfortunately, it&#8217;s also been a force for other things. I had a conversation with Tim, as a part of a set of interviews that the BBC were doing, this was in 1998. And at that stage, Tim was just exploring the idea of what he called the semantic web, which was zaml, and underlying metadata. And what Tim always envisaged the worldwide web should be, he always envisaged that every page, because he&#8217;s a data scientist, he envisaged that every page would have a beautiful set of metadata and structures, so that it could be searched and indexed.</p>\n\n\n\n<p>Of course that&#8217;s everything the worldwide web didn&#8217;t become, respectfully. We have enough trouble in the WordPress space remembering to put a, an alt text on a photo that we upload. But his envision was of this beautiful semantic web. So it hasn&#8217;t gone exactly the same way as he envisaged.</p>\n\n\n\n<p>But even without that semantic web, the additions and add-ons of things like Google, and Google search, and the ability to create an index, a massive index of the web. And now in 2025 going, hey, ChatGPT, can you just tell me the answer to this question please? And then can you write me a presentation?</p>\n\n\n\n<p>I was having a meeting with an associate of mine. I haven&#8217;t caught up with each other for about six years, and he&#8217;s deeply involved in the concept of human centered design, which is, a business practice where you, look at the customer to identify the problem. Not look at the business and try to solve a problem.</p>\n\n\n\n<p>He wanted to know about what I was doing in AI and that sort of stuff. And I said, did you know that I could write you a business plan? And they used to spend a lot of money creating business plans for people, and creating sessions and seminars. And I went, I can write you a seminar structure and plan in two minutes, on any topic.</p>\n\n\n\n<p>I said, no, we&#8217;ll do better. Hey, ChatGPT, tell me what you know about human-centered design and why it&#8217;s good. And of course it printed out 20 paragraphs. And then I went, can you summarize that for a presentation seminar? And of course it did that. And then I said, now can you give me the structure of the seminar?</p>\n\n\n\n<p>And it did that. And this guy sitting there going, are you kidding? And I said, that&#8217;s where we&#8217;ve come. But underlying all that is data and information. And none of that&#8217;s of any relevance unless you&#8217;ve got a community to share it with.</p>\n\n\n\n<p>[00:32:23] Nathan Wrigley: Do you have a sense that the internet has gone in a, I&#8217;m going to use the word bad or poor direction over the last decade? Do you have a sense that mistakes have been made? If you could rewind the clock, were there any moments in time where you think, I wish it hadn&#8217;t have gone in that direction?</p>\n\n\n\n<p>Because I often think things like proprietary platforms that kind of want to put a wall around the conversations that we have. They seem like, maybe in 50 years time when we look back, maybe they&#8217;ll seem like missteps. I don&#8217;t know. Maybe they&#8217;ll carry on and it&#8217;ll all be, as it is now.</p>\n\n\n\n<p>But it does feel like there&#8217;s a resurgence more to owning your own conversation. So obviously we do that in WordPress, but it does feel like there&#8217;s a bit of a groundswell towards more federated protocols. Things like the AT protocol that Bluesky are doing, but Mastodon and an ActivityPub and those kind of things.</p>\n\n\n\n<p>[00:33:12] Wes Tatters: I think again, if you harken back to Tim&#8217;s semantic web and, he wrote a document, 2022 I think, which was 30 years on. And he talked about where things had gone. I can tell you right now that the way I read Tim&#8217;s take on the worldwide web is that e-commerce was not a part of it. That was not a part of his idea of.</p>\n\n\n\n<p>[00:33:36] Nathan Wrigley: Yeah, how would you even have conceived that?</p>\n\n\n\n<p>[00:33:38] Wes Tatters: Yeah, e-commerce wasn&#8217;t a thing. I don&#8217;t truly think, Snapchatting or no fully explained reason, 15 second videos in TikTok were anywhere on the radar, because there was this whole deal of philosophy. But each of these things actually has the same underlying traits.</p>\n\n\n\n<p>It&#8217;s all about communities, it&#8217;s all about relationships and building relationships with people. Where I think personally we have made a misstep is in how our younger generations consume that community.</p>\n\n\n\n<p>[00:34:12] Nathan Wrigley: It&#8217;s a lot.</p>\n\n\n\n<p>[00:34:12] Wes Tatters: Well, it&#8217;s more than a lot. There was a survey done and I haven&#8217;t got the figures in front of me, because I wasn&#8217;t planning on discussing where we were here. That&#8217;s looked at the level of loneliness of people in 2025, compared to the level of loneliness of 20 and 30 years ago. And it directly related this online community thing. The, unfortunately, what do we call false community sometimes. The people we have never met that we talk to in a Snapchat or something like that, that are not community, and they&#8217;re not really our friends.</p>\n\n\n\n<p>And there is an increase in loneliness. And I think if there&#8217;s any misstep that we as a society have maybe taken out of this thing, is a lack of understanding of the impacts of loneliness. And I think the internet&#8217;s to blame for that.</p>\n\n\n\n<p>[00:35:13] Nathan Wrigley: The internet is so beguiling, isn&#8217;t it? Because there&#8217;s so much interesting stuff there. I think throw the mobile phone into that equation as well. This always on device, which is available 24 7. But it&#8217;s that capacity, incapacity, to put it down. You start doing something with it and then five minutes later you realize, often, in many cases, five minutes is not even the benchmark. More like an hour or something.</p>\n\n\n\n<p>[00:35:36] Wes Tatters: And, there are clinical reasons for that. We&#8217;re actually getting out of these devices the same dopamine hits that lead to depression. The same dopamine hits that lead to mood swings and to a certain extent mental health issues.</p>\n\n\n\n<p>We now have this whole, go on the internet and you&#8217;ll get, especially when you&#8217;re hitting my age, are you dopamine deprived? Join this, get on this dopamine detox. And it&#8217;s real. It&#8217;s a real problem. And the five minutes bursts, the swiping, the scrolling, the doom, scrolling, they&#8217;re not things that you could have even comprehended. We have all this data, massive amounts of data available to it, but we prefer to consume a, TikTok video, or look at photos of funny dogs or kittens, or dogs and kittens or whatever it is. The internet and the things that have grown out of that, have all contributed to that.</p>\n\n\n\n<p>[00:36:32] Nathan Wrigley: It really is interesting. Bit of a double-edged sword, really. Like on the one hand, the internet is probably the greatest innovation, maybe of all time. Or the electric light or, you know, what did the Romans us kind of thing.</p>\n\n\n\n<p>But also, curiously, it also has aspects of it which are really deleterious to humanity, and can really bring out the worst. It allows us to consume the worst to, I don&#8217;t know, to spend hours where we probably got other things that we should be doing, but for some reason we can&#8217;t let go of the phone, and things like that. So it is really curious.</p>\n\n\n\n<p>[00:37:06] Wes Tatters: It&#8217;s the speed that it&#8217;s happened.</p>\n\n\n\n<p>[00:37:08] Nathan Wrigley: And continues to happen. I don&#8217;t see any slowing down.</p>\n\n\n\n<p>[00:37:12] Wes Tatters: At PressConf the other day, one of the sessions was an AI session. Of course there&#8217;s going to be an AI session. Seriously, if you go to the opening of a restaurant in the town center, there&#8217;s some guy doing a presentation, and we&#8217;ve got Barry to talk about AI for 15 minutes. It feels like that anyway.</p>\n\n\n\n<p>One of the demonstrations was about two paragraph script, and it said effectively, hey, insert name of AI tool. I want you to create me a five second video, and I want the five second video to be of a dinosaur running out of a valley with a volcano erupting in the background. And as the dinosaur runs towards the camera, the ground shakes and the dinosaur&#8217;s then going to pass to the right hand side. And I&#8217;d like it to look a bit like Jurassic Park. That was literally the wording, and you hit enter not that long later, here&#8217;s a 15 second video that looks lifelike, realistic.</p>\n\n\n\n<p>[00:38:05] Nathan Wrigley: Jurassic Park.</p>\n\n\n\n<p>[00:38:06] Wes Tatters: It literally was, you may as well have been in the feature film. 10 years ago, 20 years ago, that would&#8217;ve cost couple of million dollars for that five seconds of animation. Now it&#8217;s literally something you can get on your mobile phone.</p>\n\n\n\n<p>[00:38:20] Nathan Wrigley: Anybody can get on their mobile phone.</p>\n\n\n\n<p>[00:38:22] Wes Tatters: I was looking at a video thing today. I was like, some AI tool where you can go, hey, can you, put me in a video of me flying? Yeah, sure. I just need 10 photos of you please. And, now what would you like to fly over? Yeah, technology&#8217;s changed.</p>\n\n\n\n<p>[00:38:35] Nathan Wrigley: Madness though, when you think about it, if you were to rewind the clock 30 years none of this was possible. I mean here I am talking you through a web browser as if it&#8217;s nothing. And it is utterly remarkable.</p>\n\n\n\n<p>[00:38:48] Wes Tatters: So we live in a society where we&#8217;ve moved from the first time anyone heard of a deep fake, but now it&#8217;s just what you do when you&#8217;re at lunch break.</p>\n\n\n\n<p>Things are changing. Forget about the ethics, the morals, and all those things, but our technology has changed. So yeah, to answer the question, are there missteps? Probably. But the interesting thing about the internet, and it&#8217;s something that was built into it at the beginning at DARPA, it&#8217;s actually got this amazing ability in technology to recorrect itself.</p>\n\n\n\n<p>And that was how DARPA was built. The whole idea was, if you can&#8217;t get it this way, it&#8217;ll go this way. And if you can&#8217;t get it this way, you&#8217;ll find a carrier pigeon, and you&#8217;ll keep the communications going. What we&#8217;ve discovered with communities, and with groups, is that they seem to have an inordinate way of self-correcting as well, through moderation, through conversations.</p>\n\n\n\n<p>When you get critical mass, and you pull enough people together, there is this inordinate ability to self-correct. I don&#8217;t fully understand the psychological basis behind it, but it&#8217;s fascinating how the internet has this ability to self-correct itself. So maybe over time it will, who knows?</p>\n\n\n\n<p>[00:40:02] Nathan Wrigley: Certainly in the world at large at the moment, we do seem to be in need of some sort of self-correction in all sorts of walks of life. And the WordPress community that we are both a part of definitely has had its schism over the last six months or so.</p>\n\n\n\n<p>[00:40:17] Wes Tatters: Look, and it&#8217;s been, and that&#8217;s happened before. And even those things self-correct, because there are communities that are passionate in this space. Yes, there&#8217;s been some drama. and there&#8217;s no point in having conversation about that. But one of the outputs of that has been interesting new conversations in communities. Not looking at things like how we destroy WordPress, or how we, what we do next, but actually going, how do we build our community? How do we assist our community?</p>\n\n\n\n<p>So even in those sort of challenges that every big ecosystem has, the community itself can self-correct. The community itself, can develop new relationships. And people grow out of those things.</p>\n\n\n\n<p>PressConf was an amazing example of that. Obviously it had happened before in a slightly different form a number of years ago, but this was, let&#8217;s put 150 odd in a space for a weekend, and let &#8217;em all chat and have conversations. And actually have intelligent dialogues and a whole heap of things grew out of it.</p>\n\n\n\n<p>When we have WordPress events, we have WordCamps. We have Word Camp Europe coming up. Groups creating new vision. We talk about things like contribution and what contribution looks like. There&#8217;s been some negatives about contribution in the recent space, but there&#8217;s also been some huge positives about contribution. Out of the drama we&#8217;ve had, actually created a new conversation. Many people who didn&#8217;t even understand the concept. Oh yeah, I just assumed WordPress was this thing. I never thought that there was actually people giving up their weekends to go to a day in Hyderabad to fix bugs in wordPress. But that&#8217;s what people do.</p>\n\n\n\n<p>And it actually helped us have a new conversation with a lot of people in the WordPress space that actually hadn&#8217;t even comprehended. Because they just assumed that they were, oh yeah, I just downloaded this WordPress thing.</p>\n\n\n\n<p>[00:42:13] Nathan Wrigley: Yeah, I do wonder if some things will come out of the year 2025 that would&#8217;ve been in the year 2024 unimaginable.</p>\n\n\n\n<p>[00:42:21] Wes Tatters: I would say I&#8217;m quietly positive. There are lots of conversations, at many layers. I do think, and this is my own personal opinion, that there is a time for speaking and a time for listening. And I think that right now there is a need for a lot of listening from disparate part of the community, and by listening I think a lot of people need to listen to what other people have to say. And then as a community, look at what all those things are. What&#8217;s being said, and look at what we do to self correct. I think it&#8217;s important to listen.</p>\n\n\n\n<p>[00:43:00] Nathan Wrigley: Yeah, a conversation which drifted through what the internet even was and is. Then finally landing on CMSs and WordPress and the community built up around that. So Wes, what a pool of knowledge you are. You&#8217;ve really done the entire internet circuit and I&#8217;m really glad that we got a chance to speak today. Thank you.</p>\n\n\n\n<p>[00:43:19] Wes Tatters: Nathan, it&#8217;s been a pleasure. Always happy to chat. It&#8217;s about conversation and communities. That&#8217;s what matters at the end of the day.</p>\n</div></details>\n\n\n\n<p>On the podcast today we have <a href=\"https://profiles.wordpress.org/wesrapyd/\">Wes Tatters</a>.</p>\n\n\n\n<p>Wes has been immersed in the tech space for close to four decades, starting his journey with early computers like the Commodore 64 and TRS-80. He’s been an author, with multiple books on internet technologies to his name, has worked across AV and media, and today, he’s the driving force behind Rapyd Cloud, a globally distributed hosting company. Wes’s perspective is shaped as much by his hands-on experience building communities on CompuServe, AOL, and MSN as by his deep involvement with modern open source platforms, like WordPress.</p>\n\n\n\n<p>Wes starts off by sharing some of the fascinating stories from the early web, when getting online meant stringing together modems and bulletin boards, and long-distance communication felt nothing short of miraculous. He talks about the evolution of the internet as a space for community, and how chance encounters in early online forums led to opportunities like writing for Netscape and shaping the very first JavaScript Developer Guides.</p>\n\n\n\n<p>We then discuss the changing meaning of “community” across different eras of the internet, touching on the shift from closed, walled gardens like AOL, to the open source ethos that powers projects like WordPress and much else that we take for granted online. Wes describes how WordPress’s flexibility and openness allowed anyone, anywhere, to claim their own piece of the web without technical barriers, and how this has contributed to its rise as a cornerstone of global digital freedom and self-expression.</p>\n\n\n\n<p>Our conversation also examines the challenges and potential missteps of the modern internet, from social loneliness to the commercial world of social media, and reflects on WordPress’s role in helping steer a path back to more positive, open, and empowering online experiences.</p>\n\n\n\n<p>If you’re interested in how the history of the internet directly shaped WordPress, the open web, and the communities we build today, this episode is for you.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Useful links</h2>\n\n\n\n<p><a href=\"https://rapyd.cloud/\">Rapyd Cloud</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/DARPA\">DARPA</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/AOL\">AOL</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/CompuServe\">CompuServe</a></p>\n\n\n\n<p><a href=\"https://www.amazon.co.uk/JavaScript-Developers-Guide-Wes-Tatters/dp/1575210843\">JavaScript Developers Guide</a> written by Wes</p>\n\n\n\n<p><a href=\"https://pressconf.events/\">PressConf</a></p>\n\n\n\n<p><a href=\"https://www2025.thewebconf.org/\">Worldwide Web Conference</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/Tim_Berners-Lee\"> Tim Burnes Lee</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/James_Gosling\">James Gosling</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/Laura_Lemay\">Laura Lemay</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/ASP.NET\">ASP</a></p>\n\n\n\n<p><a href=\"https://dotnet.microsoft.com/en-us/apps/aspnet\">asp.net</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/DNN_(software)\">DotNetNuke</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/Myspace\">MySpace</a></p>\n\n\n\n<p><a href=\"https://www.buddyboss.com/\">BuddyBoss</a></p>\n\n\n\n<p><a href=\"https://bsky.app/\">Bluesky</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/AT_Protocol\">AT Protocol</a></p>\n\n\n\n<p><a href=\"https://mastodon.social/\">Mastodon</a></p>\n\n\n\n<p><a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub protocol</a></p>\";s: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, 14 May 2025 14:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i: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:103:\"Do The Woo Community: Why Agency Maturity Matters When Choosing WooCommerce (or Any Ecommerce Platform)\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=96863\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:106:\"https://dothewoo.io/blog/why-agency-maturity-matters-when-choosing-woocommerce-or-any-e-commerce-platform/\";s: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:197:\"This post highlights the significance of assessing business maturity when recommending WooCommerce to clients, ensuring they understand long-term commitments for successful online store management.\";s: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, 14 May 2025 11:45: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:8:\"Bob Dunn\";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:20:\"Matt: Upcoming Talks\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=142414\";s:7:\"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/05/upcoming-talks/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:233:\"<p>It’s a busy speaking season! I just spoke at the Intelligent Change summit, and will be at SaaStock in Austin on May 14, SXSW London, on June 4, Brilliant Minds in Stockholm, and WordCamp EU in Basel, Switzerland, on June 7.</p>\";s: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, 13 May 2025 16:29:51 +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:47:\"Do The Woo Community: A Recap of PressConf 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=96913\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:46:\"https://dothewoo.io/a-recap-of-pressconf-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:253:\"The episode of WordPress Event Talk discusses PressConf, led by new host Michelle Frechette. Our hosts share insights on networking, event structure, participant feedback, and the unique atmosphere of the event, emphasizing community and business focus.\";s: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, 13 May 2025 11: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:8:\"Bob Dunn\";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:92:\"Do The Woo Community: WordPress 6.8 Moved to bcrypt: A Quiet Revolution in Password Security\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=96876\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"https://dothewoo.io/blog/wordpress-6-8-moved-to-bcrypt-a-quiet-revolution-in-password-security/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:178:\"WordPress 6.8 upgrades password security by transitioning to bcrypt, enhancing protection against attacks without disrupting users, while setting new industry security standards.\";s: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, 12 May 2025 09:31: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:8:\"Bob Dunn\";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:127:\"Gutenberg Times: Gutenberg Changelog 117 – WooCommerce Starter Theme and Blocks, WordCamp Europe, and Gutenberg 20.7 and 20.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"https://gutenbergtimes.com/?post_type=podcast&p=40406\";s:7:\"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:96:\"https://gutenbergtimes.com/podcast/gutenberg-changelog-117-woocommerce-starter-theme-and-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:48204:\"<p>Welcome to episode 117 of the Gutenberg Changelog podcast! In this jam-packed episode, host Birgit Pauli-Haack is joined by Ellen Bauer, product lead at WooCommerce for an insightful conversation covering all the latest developments in the WordPress ecosystem.</p>\n\n\n\n<p>Together, they dive into the progress on the new WooCommerce Starter Theme, its underlying “workhorse” philosophy, and the ongoing efforts to improve block theme adoption for e-commerce. Ellen shares behind-the-scenes challenges and a sneak peek into the team’s priorities—plus, learn how you can get involved and provide feedback as WooCommerce gears up for a first release in early June.</p>\n\n\n\n<p>The episode also offers a preview of what to expect at WordCamp Europe, from Ellen’s session (spoiler: it’s all about WooCommerce and block themes) to hands-on workshops like Birgit’s upcoming walkthrough of using WordPress Playground for product demos. They tackle a listener question on overriding block styles, highlight recent updates to WP-CLI, WordPress 6.8, and the Create Block Theme plugin, and break down the newest features in Gutenberg 20.7 and the upcoming 20.8 release.</p>\n\n\n\n<p>Whether you’re a theme builder, plugin developer, or a curious WordPress enthusiast, this episode is packed with actionable insights, pro tips, and friendly encouragement to explore the full potential of the block editor—especially for e-commerce sites. Tune in, and stay up-to-date with the fast-moving world of WordPress!</p>\n\n\n\n<p><a href=\"https://gutenbergtimes.com/podcast/gutenberg-changelog-117-woocommerce-starter-theme-and-blocks/#shownotes\">Show Notes</a> / <a href=\"https://gutenbergtimes.com/podcast/gutenberg-changelog-117-woocommerce-starter-theme-and-blocks/#transcript\">Transcript</a></p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Music: <a href=\"https://soundcloud.com/xirclebox\">Homer Gaines</a></li>\n\n\n\n<li>Editor: <a href=\"https://www.linkedin.com/in/sandy-reed/\">Sandy Reed</a></li>\n\n\n\n<li>Logo: <a href=\"https://markuraine.com/\">Mark Uraine</a></li>\n\n\n\n<li>Production: <a href=\"https://icodeforapurpose.com\">Birgit Pauli-Haack</a></li>\n</ul>\n\n\n\n<p class=\"has-larger-font-size\" id=\"shownotes\"><strong>Show Notes</strong></p>\n\n\n\n<h2 class=\"wp-block-heading\">Ellen Bauer</h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://x.com/ellenbauer\">On X (former Twitter) @ellenbauer</a></li>\n\n\n\n<li><a href=\"https://www.elmastudio.de/en/\">ElmaStudio</a></li>\n\n\n\n<li><a href=\"https://gutenbergtimes.com/podcast/gutenberg-changelog-105-gutenberg-18-9-block-themes-and-woocommerce/\">Gutenberg Changelog #105 – Gutenberg 18.9, Block Themes and WooCommerce</a></li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\">WooCommerce </h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://github.com/woocommerce/woo-themes/tree/trunk/woostarter\">Woo Starter Theme on GitHub</a> (MVP not for production) </li>\n\n\n\n<li><a href=\"https://developer.woocommerce.com/\">Woo Developer Blog</a></li>\n\n\n\n<li><a href=\"https://woocommerce.com/de/community-slack/\">Woo Dev Slack</a> </li>\n\n\n\n<li><a href=\"https://woocommerce.com/documentation/woocommerce/\">Woo Commerce Documentation</a></li>\n</ul>\n\n\n\n<p><strong>Listener Question</strong> on block styles and block themes</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://gutenbergtimes.com/wp-admin/post.php?post=40172&amp;action=edit\">How to overwrite or remove core block styles</a></li>\n\n\n\n<li><a href=\"https://wordpress.com/blog/2025/05/07/custom-block-styles/\">Mastering Custom Block Styles in WordPress: 6 Methods for Theme and Plugin Developers</a></li>\n\n\n\n<li><a href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/\">Seven Tasks to a Custom Block Theme: Anders Norén’s Weekend Workflow</a></li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s released: </h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://make.wordpress.org/cli/2025/05/07/wp-cli-v2-12-0-release-notes/\">WP-CLI v2.12.0 Release Notes</a></li>\n\n\n\n<li><a href=\"https://wordpress.org/news/2025/04/wordpress-6-8-1-maintenance-release/\">WordPress 6.8.1 Maintenance Release</a></li>\n\n\n\n<li><a href=\"https://github.com/WordPress/create-block-theme/releases/tag/v2.7.0\">Create Block Theme 2.7.0</a></li>\n</ul>\n\n\n\n<h3 class=\"wp-block-heading\">Gutenberg Plugin releases </h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://github.com/WordPress/gutenberg/releases/tag/v20.7.0\">Gutenberg 20.7</a></li>\n\n\n\n<li><a href=\"https://github.com/WordPress/gutenberg/releases/tag/v20.8.0-rc.1\">Gutenberg 20.8 RC 1</a></li>\n</ul>\n\n\n\n<p></p>\n\n\n\n<p class=\"has-large-font-size\">Stay in Touch</p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li>Did you like this episode? <a href=\"https://lovethepodcast.com/gutenbergchangelog\"><strong>Please write us a review </strong></a></li>\n\n\n\n<li>Ping us on X (formerly known as Twitter) or send DMs with questions. <a href=\"https://twitter.com/gutenbergtimes\">@gutenbergtimes </a>and <a href=\"https://twitter.com/bph\">@bph</a>.</li>\n\n\n\n<li><em>If you have questions or suggestions, or news you want us to include, send them to <a href=\"mailto:changelog@gutenbergtimes.com\">changelog@gutenbergtimes.com</a>. </em></li>\n\n\n\n<li><em>Please write us a review on iTunes! <a href=\"https://gutenbergtimes.com/itunes/\">(Click here to learn how)</a></em></li>\n</ul>\n</div></div>\n\n\n\n<p class=\"has-large-font-size\" id=\"transcript\"><strong>Transcript</strong></p>\n\n\n\n<p><em>Birgit Pauli-Haack</em>: Hello, and welcome to our 117th episode of the Gutenberg Changelog podcast. In today&#8217;s episode, we will talk about WooCommerce Starter Theme and Blocks, WordCamp Europe, Gutenberg 20.7 and 20.8. I&#8217;m your host, Birgit Pauli-Haack, curator at the Gutenberg Times, core contributor for the WordPress open source project, and I work for Automattic as a developer advocate. And I have with me Ellen Bauer, who is the Woo product lead and my resident theme wizard. So how are you today, Ellen? It&#8217;s so great that you can join me again.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Thank you very much, Birgit. I&#8217;m great and I&#8217;m very excited to be on your podcast again. It has been a while and it&#8217;s always exciting for me to catch up with everything going on with the Gutenberg updates or like surrounding things like create block theme and yeah, I&#8217;m excited. I&#8217;m on my way to like halfway on the way to Europe for WordCamp Europe, which is exciting. I&#8217;m in Thailand right now in Bangkok, and there&#8217;s actually a thunderstorm just rolling in, so I hope that won&#8217;t add to any noise in our podcast today. But yeah, I&#8217;m great. Thanks for having me.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Oh, you&#8217;re welcome. You&#8217;re welcome. Yeah, well, it&#8217;s always good when we have some sudden movements on our podcast. It kind of gets us excited, but it&#8217;s not so good when you have a lightning strike and this. The power goes out. So that happens America quite often..</p>\n\n\n\n<p><em>Ellen Bauer:</em> In New Zealand as well, where we live. I hope it doesn&#8217;t happen. Yeah, I don&#8217;t think so.</p>\n\n\n\n<h3 class=\"wp-block-heading\">WooCommerce Starter Theme and Block</h3>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> I don&#8217;t think so either. So. Yeah, but you mentioned the last time that was the longer time that you&#8217;re on the show. So the last time it&#8217;s about 10 months ago, and you just had started at WooCommerce and you went on a quest to increase block theme adoption for WooCommerce. So how is it going?</p>\n\n\n\n<p><em>Ellen Bauer:</em> I&#8217;m still on the same quest and yeah, we are doing a lot of work and obviously there are a lot of complicated topics to solve because Ecommerce is just another level of complexity compared to just WordPress and blogs like Core WordPress. So the first thing we had to tackle and still like, really, I feel more or less still in the beginnings of it is improving the Woo blocks and, and then like, as a next layer we are building a pattern library. But we really needed to dig into the Woo blocks and we wanted to align them more with core blocks, make it like one experience for users and there were quite a lot of discrepancies and there still are. And we are about to release the first edition of new default Woo starter theme. Not replacing but kind of as an update to the classic theme storefront. Because yeah, it is the last default Woo theme that was there that people recommended or that that was released from WooCommerce. So we are updating that and there will be a first version. It&#8217;s really just a starter. I call it the Working Horse because it&#8217;s not meant to be a pretty like shiny theme, but really a starter point and also a reference for us to. To kind of test our own blocks to make them practical to see like what can we build and what can we not, and what do we want to build for the front end of Ecommerce stores with. With WooCommerce and what is just not possible at the moment to kind of set priorities on our work on blocks for WooCommerce. And I think that has really helped us to prioritize things that this kind of prioritization hasn&#8217;t really happened before. Yeah, you really need to use your own product to kind of see the shortcomings and what you want to fix. So that is the thing. That&#8217;s why I call it the Working Horse. And then as a next step once we have this released, we want to improve documentation. We want to help theme builders use this theme as a starting point to see how we think theme builders should work with Ecommerce and like similar to the default WordPress theme Twenty Twenty-Four, Twenty Twenty-Five just as a good reference point. And we are kind of concentrating on one theme because we want to leverage styles and yeah make it more like a mix and match of styles of font sets and a pattern library. Like use the components and make them mix and match rather than having it be one kind of stiff default theme that can&#8217;t be changed. So it will become quite creative I feel. And yeah, there&#8217;s still lots to do but it&#8217;s exciting and I think it really helps us to improve what is possible in a block WooCommerce WordPress world.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Well, there was a lot to unpack. So yes.</p>\n\n\n\n<p><em>Ellen Bauer:</em> It&#8217;s a big project that kind of occupied me for the last 10 months.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> No, no kidding. And others before you. So. So you mentioned first that the work on a theme is also based on the core blocks that are in Woo and that they need to be refined. If I remember correctly. Do you have a call for input or for feedback out for WooCommerce developers? Is that still ongoing or is that already closed? I wasn&#8217;t really up to that.</p>\n\n\n\n<p><em>Ellen Bauer:</em> No, definitely we have a call out at any time for we need especially also extension builders. We need their feedback on what they want in our blocks. We need feedback from theme builders what they want the Woo blocks to be able to do. We are also working quite a lot with what we want to bring into core WordPress, and there&#8217;s a lot of changes happening to bring more of the default things that users expect from ECommerce into core. So that is happening and it does affect the blocks as well. So yeah, we can add some links to requests for feedback and I&#8217;m also always available for any kind of feedback and I think once the theme is out we haven&#8217;t promoted it really because it&#8217;s still in the works, but it will kind of come out with the next WooCommerce release which is beginning of June. And then we are going to really say hey, we need people to test it and extension builders to test it out and give us feedback.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Is there a GitHub repo where people can do a sneak peek?</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yes, there is a public GitHub repo where people can add the link to the podcast as well. And it&#8217;s yeah, we&#8217;re still doing a lot of changes, it&#8217;s being worked on. But yeah, we definitely need any kind of feedback we can get. And I think one of the disclaimers, and I put it in the readme file as well is that it&#8217;s a real work in progress, it&#8217;s not prettified or so. And I do like that. I think it&#8217;s good to show the sweat that goes into the work. And we also kind of still talk about a lot of changes like the patterns, where do we want to put the patterns and kind of looking in. For instance, what Rich Table has built on WordPress.com with a pattern library and if we can do something like that for Woo that they are just available outside of themes and really the next step I want to work on is also what kind of default patterns are shipped with WooCommerce. They will get a complete overhaul and kind of make everything more compatible. The starter theme is also based on the same theme JSON setting the assembler Rich Table’s assembler theme uses so it&#8217;s practically based on the same theme foundation. And I remember Nick Diego said to all his themes he kind of replaced to work on the basis of assembler because then we can really mix and match patterns across themes, and I think that&#8217;s a little bit limitation of block themes that in theory it&#8217;s possible, but it&#8217;s not really usable to do that. So that&#8217;s one of the things we want to improve.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, the standardizations is a little bit harder to do with block themes because people can mesh and mash the patterns from all kinds of different sources. Yeah. So timeline wise, the first sneak peek or the first version comes out of the starter theme in beginning of June. But the block work is ongoing but it needs to come to a certain place so you can release that theme and it&#8217;s actually a working example. And then it depends on the feedback that you get and also the integration with other extensions, what the next updates on the theme are going to be.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yeah, my goal for the next step after this initial release is look at the top 10 extensions and work with all of them to make it comfortable with this theme. And I think this will help all block themes to be more streamlined. And we are also really looking at all the cart and checkout pages and order confirmation. My account page is still not blockified. That&#8217;s on my wish list. It has been a little bit on the backlog, and I want to change that and kind of everything. Post purchase still needs a lot of work all the page templates there and yeah we will redo the whole default WooCommerce patterns that are shipped. Redo work on the default page templates that are that are in WooCommerce and kind of have a deep look into them and really make sure that this default starter theme just out of the box really works with everything that kind of WooCommerce recommends. That is the goal and yeah that it&#8217;s still a lot of work to be able to do that but it&#8217;s good to have a theme like a product that we can test it on. I think that was missing the WooCommerce that a lot of times we really didn&#8217;t know where to test and I think we have done it with Twenty Twenty-Four, Twenty Twenty-Five. But these themes are not meant to be ECommerce first themes, and I think that&#8217;s what we want to change with that project that we just felt we needed an E Commerce first theme to.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, absolutely.</p>\n\n\n\n<p><em>Ellen Bauer:</em> To really test all our product range and our core plugin with makes total sense.</p>\n\n\n\n<h3 class=\"wp-block-heading\">WordCamp Europe</h3>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> So beginning of June, I&#8217;m coming back to that because that&#8217;s also the week of WordCamp Europe and I know.</p>\n\n\n\n<p><em>Ellen Bauer:</em> So exciting.</p>\n\n\n\n<p>Birgit Pauli-Haack: It&#8217;s so exciting that we finally are to that place again that we meet up and at WordCamp Europe and if our listeners come. When you see us at the WordCamp Europe and we&#8217;re talking to somebody, it&#8217;s all just come up to us, introduce yourself and then be included in any conversation. That&#8217;s what the WordCamp is all about. It&#8217;s not that people who know each other can click together. It&#8217;s meet new people, meet new discussions, have a deeper discussion on certain WordPress topics in a face-to-face settings. So. So what&#8217;s your talk about then Ellen?</p>\n\n\n\n<p>Ellen Bauer: It&#8217;s about WooCommerce and block themes.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Oh no, you&#8217;re just kidding.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yes. Yay. So yeah, I&#8217;m available to talk about these topics actually. Anything I love to be able to meet in person. I loved last year&#8217;s being there at interim and I&#8217;m really excited to be able to to be there and getting myself up on stage. I&#8217;m a little bit frightened and my talk is going to be the last ones on the second day. So yeah, I&#8217;m not sure. I hope I won&#8217;t be nervous through the whole WordCamp two days or three days with contributor day having the talk kind of on the end. But yeah, please say hi and reach out to me as well if you see me around. </p>\n\n\n\n<p>Yeah, it&#8217;s so it I will talk about the benefits of block themes for Ecommerce because a lot of people I think kind of have the idea that block themes are great for blogs or for websites, for WordPress sites, but don&#8217;t use a block theme for Ecommerce. And I think that&#8217;s just a little bit of a perception that people put this in this box in this drawer, and it&#8217;s difficult to take WooCommerce out of that. I think once people have that kind of thought in their head that it&#8217;s not a great idea or not ready yet or so yeah, I want to give some examples to why I think that is not true. For instance the blog checkout, how much better the performance is and what kind of benefits people get. Because I think a lot of times users really don&#8217;t know about the benefits and benefits of customizing your single product page and just getting creative on what you can do in regards to maybe even different product pages. And just mainly I really want to show examples to make it just really visually appealing that you can drop in patterns and get a really customized WooCommerce experience with block themes and also way better performance and just the flexibility of it, and the ease and the speed and just all the benefits that are there. And also not forget to mention some limitations obviously that are still there that mainly come from plugin extensions WooCommerce extensions not being compatible and we are really hardly working on it. But there are a lot of extensions. Obviously some Ecommerce WooCommerce sites have limitations but I think it&#8217;s just good to highlight that and that we are working on it and remind people that maybe it&#8217;s a good idea to switch to a block theme with your Ecommerce site.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. Even if not to switch to definitely try it out and kind of see.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Where that is or build a road map.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, no, I&#8217;m. I&#8217;m excited about that. I&#8217;m gonna, I will be able to come to kind of learn about all that and bring it back to our listeners later on or in the Gutenberg Times Weekend Edition kind of thing.</p>\n\n\n\n<p>Ellen Bauer: So what is the topic of your talk or workshop?</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> I&#8217;m doing a workshop and from zero to demo how to use WordPress playground to put a demo for your product together and we are probably looking at. So it&#8217;s a 75-minute workshop and we do it hands-on. We use the Playground built in Blueprint builder. We talk about the steps and the settings and how you get the different landing pages that you could do for your demo. You don&#8217;t have to start with the front end. You can go deep into it. So if you have a plugin that shows something in the, that works in the editor that you have a landing page that drops the person who wants to test it out right into the block editor of the Playground instance and have all the settings in there that your plugin needs or your theme needs to be to show off the better part of it and have that ready for one click. And you don&#8217;t have to think about a server, you don&#8217;t have to think about a database, you don&#8217;t have to think about hosting it somewhere. You just use Playground Instance and have can demo your product. So I think the workshop is going to be hands-on. It&#8217;s. It&#8217;s going really from zero. Okay, what&#8217;s this JSON file and all that and then we will build a little demo out. What are the pitfalls for content imports? How the content import needs to kind of be structured so the pictures that you need are actually showing and all these little things that sometimes trip up people who try it out.</p>\n\n\n\n<p><em>Ellen Bauer:</em> That&#8217;s exciting. I&#8217;m just wondering, do people have to register beforehand for the workshops?</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yes.</p>\n\n\n\n<p><em>Ellen Bauer:</em> How does it work?</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Registration for workshops on the website has just opened a couple of days ago or even just a couple of days ago, and you need to register and you also Registration is not all. It&#8217;s a free registration. Of course. If you already have your WordCamp ticket, you need to use the same email with which you bought your ticket and then they can match up the two tickets there. It&#8217;s also necessary that you are at the workshop 10 minutes before because if there&#8217;s a waiting list and you are not there to claim your seat, it will go to the waiting list members. Well, I&#8217;m not in. Workshops are all competing against all the rest of the talks in three tracks, so I don&#8217;t know how many people will show up. So it&#8217;s going to. It&#8217;s going to be on Friday after lunch at 2:30. No 1:30, sorry, at 1:30 in the Singapore Place, I think. Yeah. Workshops. There&#8217;s also a workshop with Milana Cap on the Interactivity API, and there is a workshop with the Block Development Cookbook with Ryan Welcher. It&#8217;s always great fun to do. And then Berislav also has a web playground workshop and that is a little bit going deeper into using it for automatic testing. So building automatic tests with WordPress Playground. And then those are the four workshops Interactivity API, automatic testing with Playground, demo site with Playground, and the Block Developer cookbook every day. Friday too and Saturday too. So it&#8217;s really cool. Well, thank you for asking.</p>\n\n\n\n<p><em>Ellen Bauer:</em> I have to register myself too.</p>\n\n\n\n<h3 class=\"wp-block-heading\">Listener Questions</h3>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, absolutely. So we had a listener question since the previous Gutenberg Changelog podcast and one is how to override the block styles that come with the theme. </p>\n\n\n\n<p>So I did a little short post on the Gutenberg Times on how to do this. If they are registered correctly, then you can do it over the global styles in the site editor. If you can&#8217;t because they&#8217;re registered with an older version of the interface, you can definitely unregister them. So add your own block styles to it. I have the link to the how to in the show notes and they are also published on the or that particular post also published on the Gutenberg Times. It&#8217;s very short but it dives a little bit deeper into how to do that. You could also how you override it in theme JSON. This is also a it&#8217;s not a no code variation but it&#8217;s also the theme JSON is fairly human readable and it gives you an example on how the JSON needs to look so you can override it in the theme JSON. And then there&#8217;s also a resource and that&#8217;s a huge resource on custom block styles in WordPress where you get theme developers and plugin developers can learn if they haven&#8217;t yet developed six methods to do block styles. What are block styles? Block styles is a way to add CSS to a Gutenberg core block. So it&#8217;s available for the content creator in the sidebar to just switch it over to the style. So if you have an image style and you want a, you want a certain border, you want a certain radius on the border, you want a certain color on it and you want to also a shadow on it, if that&#8217;s a standard for you, the theme developer can put that into a block style, and then every time the content creator wants to create use that block, it will show it has a button to show that particular comp more complicated styling and doesn&#8217;t have to do it every time click by click by click. So it&#8217;s a one click replacing the style of the core block.</p>\n\n\n\n<p><em>Ellen Bauer:</em> One of my favorites is always the button block like outline button. I think that&#8217;s like the one of the best examples where we, where we kind of use that main button, a primary button, secondary button, outline button.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, yeah. And the core blocks come with rounded corners and that&#8217;s normally not everybody&#8217;s a fan of rounded corners, so you need to override that. But it&#8217;s relatively easy to do. You can certainly also do block styles very much more complicated than what&#8217;s in the examples there. I&#8217;ve seen some very interesting block styles for the separator or quotes and pull quotes. They can have some very intriguing designs, but you need to put them into the theme JSON so people can adopt them through the global styles, not theme JSON in the theme JSONs, or with WordPress 6.6 comes a very easy way to add block styles is to put it in a JSON file under your styles and then just have the naming conventions there in terms of which block they attribute to and what the styles are. So and then WordPress picks up that from that particular place and adds it automatically to it. So you don&#8217;t have to worry about your CSS files. You don&#8217;t have to worry about enqueuing it on the editor or enqueuing it on the front end. WordPress does that all for you. So box hunts have been in Gutenberg for or in the since the beginning but this is now the most streamlined way to get them into the theme.</p>\n\n\n\n<p><em>Ellen Bauer:</em> And I, I always love that because you can reuse it. It&#8217;s like a, just a snippet a component, and you can you reuse it on multiple projects. That is like such a game changer, I think.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Absolutely. Yeah. And you can build your own style kind of library. Yeah. And then just move in the ones that you need. Yeah. If you want to go really out, then you can actually put together your own webpack building process where you kind of pull depending on which parameters pull in the particular styles, the patterns and the templates for a new bespoke theme for a client. So yeah, I like that. It&#8217;s all now file based and with less code, even more power. Yeah, so it&#8217;s pretty cool. So the two articles will be in the show notes linked. </p>\n\n\n\n<h3 class=\"wp-block-heading\">What’s Released &#8211; WPCLI Update</h3>\n\n\n\n<p>Now we come to the what&#8217;s Released section and I just wanted to give a shout out to Alain Schlesser who has done a tremendous job in maintaining the WPCLI components or features, and he just released another update for the version 2.12. Of course the release notes will be linked in the show notes, but I just wanted to highlight a few things. </p>\n\n\n\n<p>Now it&#8217;s very developer focused. That&#8217;s why it probably doesn&#8217;t get so many shoutouts on all the WordPress news. But it&#8217;s so called plug and patch commands for caches and transients. That means it can directly manipulate those individual entries. Wired the WPCLI command. And then there are the post list. Can now handle complex query flags in a JSON notation, which just makes it much easier to build the commands out with a text underscore query, which means taxonomy query, meter query and posted date fields. Just to add those with a flag in your command. Post meta can now be forced to return a single value. Sometimes post meta has a certain key, has multiple values over the course of a site existence. So you can now flag WordPress to only return the latest one and you don&#8217;t have to deal with all the other entries for that particular key value. That&#8217;s a pretty good neat feature there. The make JSON command is part of the WPCLI International component and it&#8217;s more powerful now. You can set the custom text domain, and you can also define the file extensions to parse. So that&#8217;s a side note. WPI18N make-JSON is the command that is used for JavaScript internationalization on WordPress with Gutenberg. A lot of interfaces have been built through JavaScript and they also need to be translated. So this helps you with organizing those strings for translation. Yeah, and WPCLI is then also fully compatible with PHP 8.4. So if you found that exciting as I do, go and read the release notes because Alain has published quite a few example code and commands and what the output is from those commands. So you can improve your WPCLI knowledge right there from the release notes. Yeah, so that was one thing. Do you want to talk us through the WordPress 6.8 release?</p>\n\n\n\n<h3 class=\"wp-block-heading\">WordPress 6.1.8 Release</h3>\n\n\n\n<p><em>Ellen Bauer:</em> Yes. So the 6.81 was the maintenance release and there were a few, maybe you have to help me out, Birgit.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. So yeah, Aaron Jorbin mentioned that there are 15 bugs through core and Block editor that had been released on April 30th. So the most important one is the regression fix that the meta boxes area had unwanted size handles and it broke the auto scroll. So you couldn&#8217;t just scroll down in a post to your meta boxes and fill them out. You had to kind of grab the handle and push pull them up because they&#8217;re now in a separate iframe or were. And that didn&#8217;t work well for many sites. And that&#8217;s why we have a release two weeks after the main release that is going to be fixed. So there was a revert on that feature. Also a revert was the edit site link.</p>\n\n\n\n<p>Ellen Bauer: The edit site link?</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, in the top admin bar it had the behavior that when you click on it, you landed automatically on the template of the page that you were looking at. But in 6.8 it changed that. You always went back to the first page of the site editor, and somehow the muscle memory of a lot of people who were accustomed to the other one, it was very irritating for them, and they made their feedback known and it&#8217;s definitely a 50/50 split. And so they reverted that change and are now thinking of what could be a better solution. And maybe it needs to be an edit site menu. Yeah. With multiple different menu items in there like edit template and a pattern edit page kind of thing. But yeah, that&#8217;s out in discussion and I don&#8217;t know where it&#8217;s going to land. But at least we have the previous fix again in there. And then also. Oh, and the rest API handing out the sticky post was a little haphazardous and it&#8217;s now fixed. The full list is in the release note, and we put them in the show notes of course. But yeah, update definitely. Yeah. Because it will be a more streamlined experience. And yeah, a lot of releases today. So create Block theme was released with 2.7. Do you want to grab that?</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yeah, I can, I can take over. So yeah, I love that plugin. I use it quite a lot and it had been. It&#8217;s really improved over the years. And so if you maybe haven&#8217;t checked it out yet or don&#8217;t even know that it exists, it&#8217;s really, really cool for quickly creating block themes or child themes or just kind of creating patterns, like building out your patterns. So some updates that were done in the latest release 2.7 was that there was a bug with the figcaptions not being translated and that was fixed for image and video blocks. The icons for the sidebar. I think there were problems with translations and right to left language. The icons weren&#8217;t on the right side or. And the help kind of the help button wasn&#8217;t aligned. So you can see the before and after screenshots of the changes. And I think the chevron. I&#8217;m not sure if I&#8217;m saying that word correctly. I think, correct me if I&#8217;m wrong, but I never know how to pronounce the chevron. Yeah, they weren&#8217;t switching on to the other side, so that was fixed. And I think also some sizing for the icons, and then php CS removed unused files and it just released files. I&#8217;m not 100% sure what was the problem there.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> I don&#8217;t know what the problem was, but it&#8217;s fixed.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Just some unused files were deleted.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, there were some unused files that were not used in the composer when you were putting together a development environment for the plugin. So because yeah, contributors want to contribute but they want to make sure that the environment is in the right place. Then there were some. Yeah, also code quality fixes and the wp-env that&#8217;s the testing WordPress the configuration has been improved and offers now certain environment variables that you can set on the command.</p>\n\n\n\n<p><em>Ellen Bauer: </em>So the create block, the major. Say again that were the major updates for that release.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> There&#8217;s right now a discussion going on on GitHub and on the repo about what to do with the pattern management because the advantage of putting the patterns in there doesn&#8217;t offset the disadvantages while working with it in the site. So what it does right now is when you say okay, save the patterns, it will remove the patterns from the. From the database and put it all in the theme. But of course all the sync patterns will become normal patterns because in a theme you don&#8217;t have sync patterns. So it&#8217;s kind of that in between problem that sync patterns are not yet available for themes but you actually want them in your site. So it confuses people quite a bit. And that&#8217;s a discussion on how not to confuse people, which is actually a pretty good goal.</p>\n\n\n\n<p><em>Ellen Bauer:</em> It&#8217;s tough.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Totally tough. Yeah. </p>\n\n\n\n<h3 class=\"wp-block-heading\">Gutenberg 20.7</h3>\n\n\n\n<p>So, and that brings us to the Gutenberg releases we have Gutenberg 20.7 came out with 22 contributors. Two of them were first timers. </p>\n\n\n\n<h3 class=\"wp-block-heading\">Enhancements</h3>\n\n\n\n<p>And I&#8217;ll start with the format library. The format library is the library that controls the dropdown on the block toolbar with different formatting options. And now you can also set the alpha value for the highlight. So you could actually highlight some words in a paragraph and click on the format drop down, and then highlight that and it would give you a color theme. But now you can also set the alpha value for the highlight manually. That format features are now also available for the details block. Now you can highlight stuff in the details blocks in the summary or in the expansion thing.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yeah, I think there was some kind of hard coded things in there that you couldn&#8217;t do that. And now you can do all the formatting in the details block.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, what was hard coded was the allow list in the details block. So they removed that. So now the formatting, all the formatting is available for the details block.</p>\n\n\n\n<p><em>Ellen Bauer:</em> The next one was the navigation in the site view. Now it automatically the default is that it expanded. And before it was not expanded, you had to have an extra click to. To open the sub menus. And in the PR there&#8217;s a before and after. And it&#8217;s really an improvement because you can see right away the entire menu. I love the site view.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Oh, the it&#8217;s actually a list called List.</p>\n\n\n\n<p><em>Ellen Bauer:</em> View, the list view and also in the, the like in the page editor in the template on both sides, it&#8217;s. It&#8217;s now automatic by default expanded. Is that correct?</p>\n\n\n\n<p>Birgit Pauli-Haack: Oh yeah, right. Right now the navigation block, when you try to edit it, it has a nice sidebar as well. And it&#8217;s also there expanded. </p>\n\n\n\n<p>So next item I want to talk about is the table block. Table block doesn&#8217;t get a whole lot of love from Gutenberg developers, but it&#8217;s actually pretty cool. And what&#8217;s mostly cool about it is when you have a markdown table from GitHub or from any other. So even if you work with AIs, I had a list of posts with views, and all that and the AI created that, but I told them to give me a markdown table so when I do, I can copy paste it into a post. And that was really cool because it now also preserves the column alignment in the pasting. Before you had to just fiddle around with it quite a bit on certain things where it wouldn&#8217;t come over. But that&#8217;s actually a really good feature to be that it possible that you can paste markdown tables. Not only markdown that we knew, but you can also mark down tables and it&#8217;s pulling it into a table block. I think that was it for 20.7. Yep. Okay, that brings us to 20.8. </p>\n\n\n\n<h3 class=\"wp-block-heading\">Gutenberg 20.8</h3>\n\n\n\n<p>And 20.8 hasn&#8217;t been released yet when we record the show, but the release candidate was out and that&#8217;s what our changelog is about. </p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Enhancements</strong></h3>\n\n\n\n<p>So the Create block package can now also have a text domain flag when you start out your scaffolding. So it will be repeated throughout the plugin your text domain for the translation as well. And you don&#8217;t have to manually put this all in.</p>\n\n\n\n<p><em>Ellen Bauer:</em> I think the next one was that the text is now customizable for the next and previous button text, which wasn&#8217;t possible before to customize the text. That was an improvement.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Absolutely. There are now two new properties for the component available where you can customize it by code when you use them in your plugins, and that&#8217;s for the guide component. The guide is what pops up but nobody reads is the guide that comes up with the block editor. If you first time install a site and go into the editor. That&#8217;s the guide. Yeah. You can use it also for your plugins, and you can use it also for your theme. If you want to add text in there you to guide your users to certain things and then also makes those buttons are now customizable.</p>\n\n\n\n<p><em>Ellen Bauer:</em> The next one was search functionality for page templates. When you want to change the page template or swap them out. There wasn&#8217;t a way to understand correctly to like a proper or easy way to search for your templates if you have a lot of them. And now that&#8217;s improved. Is that correct, Birgit?</p>\n\n\n\n<p><em>Birgit Pauli-Haack</em>: Yeah. And it&#8217;s also for the pattern selection search.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Oh, the same.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> It&#8217;s both. Yeah.</p>\n\n\n\n<p><em>Ellen Bauer:</em> I think that is really, really helpful.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. The testing instructions starts out, make sure you have at least 15 templates in there.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yeah.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> That cannot be applied to a page.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Which can quickly happen. And that&#8217;s cool to have custom templates, right?</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. But that&#8217;s&#8230;</p>\n\n\n\n<p><em>Ellen Bauer:</em> You need a lot.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> You definitely need a search component in there. Yes.</p>\n\n\n\n<p><em>Ellen Bauer:</em> To roll through them.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. The next one mentions the reverse of the split view for the meta boxes that were in 28. It was released in Gutenberg, but it then was backported to the 6.8.1 release. So this is definitely already out and it&#8217;s also in the WordPress versions. Yeah, the widget editor. I don&#8217;t. I didn&#8217;t even know we had a widget editor.</p>\n\n\n\n<h3 class=\"wp-block-heading\">New API</h3>\n\n\n\n<p><em>Ellen Bauer: </em>Yeah, I was just saying I didn&#8217;t quite understand that one, to be honest.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. In the classic theme you have the widget menu and that is for a long time already a block based interface. So you need to lock the widget saving or the update button and all that. So now you can lock some of the functionality because not everybody should be able to do stuff there. Yeah. </p>\n\n\n\n<h3 class=\"wp-block-heading\">Bug Fixes</h3>\n\n\n\n<p>And then there are some fixes on the block editor. Now that was actually always a pet peeve of mine that when you get invalid blocks that you can&#8217;t at least edit the HTML because you don&#8217;t know what needs to be fixed. And now you can edit the HTML for invalid blocks.</p>\n\n\n\n<p><em>Ellen Bauer: </em>I do like that a lot too because sometimes it happens and you have that code there and you like want to get in.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. The last time I think I had.</p>\n\n\n\n<p><em>Ellen Bauer:</em> It with the no you can chat.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Pack with Jetpack AI features. Yeah. Somehow when I mark two paragraphs and then the first paragraph becomes invalid when I hit on the AI feature and it was only because there&#8217;s one of the HTML wasn&#8217;t closed well enough. I need to figure that out. But do a bug report. But yeah, it would have been really helpful to. To just manipulate the HTML of that. The next one is that PR or update will prevent spacer block to have a negative width when it&#8217;s used in a row block. That offsets all kinds of different things and that can definitely ruins your design. You can have a spacer block with a negative margin or negative width. That&#8217;s no problem. Yeah, but it doesn&#8217;t.</p>\n\n\n\n<p><em>Ellen Bauer:</em> But not inside a roadblock.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah, because that.</p>\n\n\n\n<p><em>Ellen Bauer:</em> So now it&#8217;s chooses to design the browser detects. Hey, I&#8217;m a spacer block inside a row block and the negative margin option is not available any longer. That is cool.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. And there&#8217;s a quality fix on that. Some of the block HTML now get box sizing property so that the overflow into the next block or into the next design element can be prevented. That&#8217;s definitely a good fix because some people are kind of getting really elaborate on those designs. And then how do you handle that? </p>\n\n\n\n<h3 class=\"wp-block-heading\">Documentation</h3>\n\n\n\n<p>We already mentioned the create block and the text domain flag. So that&#8217;s now in the create block readme. The block bindings API has a post meta limitation. This new update prevents protected post meta that are prefixed with underscore that cannot be used for block bindings. And the post meta also has to be available in the REST API. Those are the two limitations and they were not yet mentioned in the documentation. And also block bindings are only available for four blocks. So that&#8217;s the heading block, the paragraph block, the image block and the button block. All other blocks cannot yet handle block bindings. So those are all three limitations there. And now it&#8217;s in the documentation with working on those block style articles I found that the latest register block style parameter that came in with 6.6 called style underscore data hasn&#8217;t been documented which has been done now because that&#8217;s. That&#8217;s the most. That&#8217;s a great way to use it in a plugin to use the style underscore data because only the styled underscore data for the register block style function also puts the styles into the global styles for content creators to modify them. All the others you can do it on the page by page level. It&#8217;s in the styles but you cannot change them globally for a site. Yeah, that&#8217;s interesting. That was an interesting find there. So. Yeah, those are our Gutenberg releases. Wow, that&#8217;s. That&#8217;s cool. We are done with that. The release is either Friday May 9th for 20.8 or even today. We are recording this on May 8th. Well, we come to the end of things. So Ellen, I wish you safe travels to Europe.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Thank you.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> When are you flying in? I don&#8217;t want to stalk you.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Saturday night and arriving Sunday early morning and then heading actually to Berlin for a team meetup first. Then heading to Sweden for another meetup and then kind of taking a little family holiday break before arriving freshly rested in Basel.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. And with all the updates from the team. Freshly rested. So.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yes.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. You get the latest from WooCommerce for. From Ellen Bower at WordCamp Europe.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yeah, it&#8217;s going to be an exciting trip. I&#8217;m looking forward to coming to Europe. Should be fun. Is there any good weather I&#8217;ve seen the weather.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> It&#8217;s like quite coldish beginning of June. It&#8217;s normally pretty warm during the day. Yeah. Especially in that area that&#8217;s always a little bit ahead towards summer than the rest of Germany.</p>\n\n\n\n<p><em>Ellen Bauer:</em> The warmer.</p>\n\n\n\n<p><em>Birgit Pauli-Haack: </em>Yeah, because it&#8217;s a little.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yeah, I know that&#8217;s. I didn&#8217;t bring any warm clothes though.</p>\n\n\n\n<p><em>Birgit Pauli-Haack: </em>Well, I would get rid of.</p>\n\n\n\n<p><em>Ellen Bauer:</em> I think I have to buy one.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Yeah. Yeah. I&#8217;m. We are actually heading out for vacation at the end of June. So we have team meetup at the end of June. And then afterwards, right away, I&#8217;m going to be in Norway for our family vacation. So I don&#8217;t know when we have the next, I think between WordCamp Europe and end of June, we will have another Gutenberg Changelog episode. And until then, as always, the show notes will be published on gutenbergtimes.com forward slash podcast. This is episode 117. 117. And if you have questions or suggestions, as you know, we are gonna discuss them on the next episode or in a post on Gutenberg Times or both. And if you have any news that you want to include, send them to <a href=\"mailto:changelog@gutenbergtimes.com\">changelog@gutenbergtimes.com</a> that&#8217;s <a href=\"mailto:changelog@gutenbergtimes.com\">changelog@gutenbergtimes.com</a> or ping me on Twitter, Blue Sky, Mastodon. And that&#8217;s all. All the ends are open. So thank you for coming, Ellan, and thank you to our listeners. And this is goodbye for me until the next time.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Yeah, take care, everyone. And yeah, please reach out to us. There&#8217;s any questions also for my side.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> All right.</p>\n\n\n\n<p><em>Ellen Bauer: </em>Thank you for having me, Birgit.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> Oh, you&#8217;re welcome. </p>\n\n\n\n<p><em>Ellen Bauer:</em> Thank you.</p>\n\n\n\n<p><em>Birgit Pauli-Haack:</em> It is.</p>\n\n\n\n<p><em>Ellen Bauer:</em> Bye Bye.</p>\";s: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, 11 May 2025 09:00:30 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i: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:88:\"Gutenberg Times: Seven Tasks to a Custom Block Theme: Anders Norén’s Weekend Workflow\";s:7:\"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=28477\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/\";s: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:150274:\"<p>Have you ever wondered how a modern WordPress block theme comes together &#8211; from first sketches to a polished, production-ready design? Over a single weekend, Anders Norén built Pulitzer, a new block theme, from the ground up. In this post, I’ll walk you through Anders’ process. I&#8217;ll highlight the tools, decisions, and little tricks that helped him move quickly.</p>\n\n\n\n<blockquote class=\"wp-block-quote has-accent-color has-text-color has-link-color has-normal-font-size wp-elements-7e7c6e4a188deb9c1cff659965fc3217 is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;I have the house to myself this weekend, so I thought I’d try something new. My goal is to build and submit a new free block theme to before Monday. While I work, I’ll describe my dev process in this thread.&#8221;</p>\n<cite>Anders Norén on X (formerly known as Twitter) </cite></blockquote>\n\n\n\n<p>About a year ago, <strong>Anders Norén</strong> posted an X (formerly known as Twitter) thread about his process. He gave me permission to collect the tweets into a blog post. Since then, he deleted his account and content on X. The valuable information is not lost. Here you go.</p>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-normal-font-size\"><strong>Table of contents</strong></p>\n\n\n\n<nav class=\"wp-block-table-of-contents\"><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#the-inspiration-and-seven-tools\">The inspiration and seven tools</a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#figma\">Figma</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#jetpack-and-block-bindings\">Jetpack and Block Bindings </a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#studio-app\">Studio app </a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#wordpress-com-hosting\">WordPress.com hosting</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#create-block-theme\">Create Block Theme</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#twenty-twenty-four\">Twenty Twenty-Four</a></li></ol></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#first-task-remove-many-things\">First task: remove many things</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#second-task-update-theme-json\">Second task: update theme.json</a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#spacing-and-colors\">Spacing and Colors</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#typography\">Typography</a></li></ol></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#third-task-templates-and-patterns\">Third task: Templates and Patterns</a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#header-and-footer\">Header and Footer</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#archives\">Archives</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#alternative-post-layouts\">Alternative post layouts</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#404-template-and-the-search-block\">404-template and the Search block</a></li></ol></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#fourth-task-handling-blocks\">Fourth task: handling blocks</a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#jetpack-blocks\">Jetpack blocks</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#block-bindings-api-blocks\">Block Bindings API blocks</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#the-copyright-year-in-the-footer\">The copyright year in the footer</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#reading-time\">Reading Time </a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#comments-count\">Comments count </a></li></ol></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#fifth-task-patterns\">Fifth Task: Patterns</a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#the-newsletter-page-pattern\">The newsletter page pattern</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#the-resume-page-pattern\">The resume page pattern</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#contact-page-pattern\">Contact Page Pattern</a></li></ol></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#sixth-task-style-variations\">Sixth Task: Style Variations</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#seventh-task-submit-to-the-repository\">Seventh Task: Submit to the Repository</a></li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/#who-is-anders-noren\">Who is Anders Norén?</a></li></ol></nav>\n</div></div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"the-inspiration-and-seven-tools\">The inspiration and seven tools</h2>\n\n\n\n<p>The theme Norén set out to build that weekend is called Pulitzer. It is meant for long-form writing with a special consideration for writers with newsletters. </p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"figma\">Figma</h3>\n\n\n\n<p>You can find <a href=\"https://www.figma.com/proto/XGptBeSLNzlrw0hzeNnWdb/Pulitzer?page-id=50%3A1594&amp;type=design&amp;node-id=50-1595&amp;viewport=938%2C675%2C0.08&amp;t=jQKrUgZF0ItqgXzw-1&amp;scaling=scale-down-width\">a Figma presentation here</a>. The video walks you through the Pulitzer Figma space.</p>\n\n\n\n		<figure class=\"wp-block-jetpack-videopress jetpack-videopress-player\">\n			<div class=\"jetpack-videopress-player__wrapper\"> </div>\n			<figcaption></figcaption>\n			\n		</figure>\n		\n\n\n<h3 class=\"wp-block-heading\" id=\"jetpack-and-block-bindings\">Jetpack and Block Bindings </h3>\n\n\n\n<p>Some elements in the design stand out:  </p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Reading time </li>\n\n\n\n<li>Like button </li>\n\n\n\n<li>Share buttons </li>\n\n\n\n<li>Newsletter signup </li>\n</ol>\n\n\n\n<p>For a self-hosted WordPress site, those blocks are not available out of the box unless you install the <a href=\"https://wordpress.org/plugins/jetpack/\">Jetpack plugin</a>. For the reading time, comment count and copyright year in the footer, Norén experimented with the <a href=\"https://developer.wordpress.org/block-editor/reference-guides/block-api/block-bindings/\">Block Bindings API.</a></p>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full\"><img alt=\"Mockup of a single post representation in a list of post with red time, number of likes and number of comments \" class=\"wp-image-40085\" height=\"228\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/04/Screenshot-2025-04-22-at-17.30.23.png?resize=601%2C228&#038;ssl=1\" width=\"601\" /></figure>\n</div></div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"studio-app\">Studio app </h3>\n\n\n\n<p>This was also the first time, Norén used the <a href=\"https://developer.wordpress.com/studio/\">Studio app by WordPress.com</a> for local development. It&#8217;s free and open-source. </p>\n\n\n\n<blockquote class=\"wp-block-quote has-accent-color has-text-color has-link-color wp-elements-c971a24caa690fbf8f4246ad45350563 is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;First impressions are very good. It probably doesn’t tick all the boxes for people with more advanced needs, but for what I’m doing, it seems perfect.&#8221;</p>\n\n\n\n<p><em>Anders Norén</em></p>\n</blockquote>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot of Studio, the free and open-source local development tool by WordPress.com\" class=\"wp-image-28483\" height=\"458\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMKJXquWoAAl50y.jpeg?resize=652%2C458&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wordpress-com-hosting\">WordPress.com hosting</h3>\n\n\n\n<p>Norén hosts his sites on WordPress.com. Because of the <a href=\"https://developer.wordpress.com/docs/developer-tools/github-deployments/\">GitHub Deployment </a> feature, he found it easy to keep the Pulitzer demo site updated.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"create-block-theme\">Create Block Theme</h3>\n\n\n\n<p>Another tool he used is the community plugin <a href=\"https://wordpress.org/plugins/create-block-theme/\">Create Block theme</a>. Once installed, it helps you make design decisions in the Site Editor and save them back to your theme&#8217;s file.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"twenty-twenty-four\">Twenty Twenty-Four</h3>\n\n\n\n<blockquote class=\"wp-block-quote has-accent-color has-text-color has-link-color has-normal-font-size wp-elements-16a3247975630952417fec2a2e718fb0 is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;Twenty Twenty-Four is my go-to starting point on most projects these days.&#8221; </p>\n<cite>Anders Norén</cite></blockquote>\n\n\n\n<p>He also found that it&#8217;s probably the best default theme ever. He gave a special shout-out to the theme leads <a href=\"https://profiles.wordpress.org/luminuu/\">Jessica Lyschik</a> and <a href=\"https://profiles.wordpress.org/onemaggie/\">Maggie Cabrera</a>.</p>\n\n\n\n<p>Both the demo and the GitHub repo are publicly accessible:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://t.co/bosfwXWjkU\" rel=\"noreferrer noopener\" target=\"_blank\">https://pulitzer.andersnoren.se</a></li>\n\n\n\n<li><a href=\"https://github.com/andersnoren/pulitzer\">https://github.com/andersnoren/pulitzer</a></li>\n</ul>\n\n\n\n<p>With all the tools in place, Anders Norén ventured to build the WordPress theme.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"first-task-remove-many-things\">First task: remove many things</h2>\n\n\n\n<p>Norén began by taking the <a href=\"https://wordpress.org/themes/twentytwentyfour/\">Twenty-Twenty-Four</a> default theme. He started with removing all the templates, template parts, patterns, fonts, images, and styles that won&#8217;t be needed. Then, he renamed the rest.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot of the list of files \" class=\"wp-image-28485\" height=\"774\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMKVaZ8XkAENvj6.jpeg?resize=652%2C774&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"second-task-update-theme-json\">Second task: update theme.json</h2>\n\n\n\n<p>In a second step, Norén updated the theme settings with those from the design in the <code>theme.json</code> file</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>spacing sizes, </li>\n\n\n\n<li>colors, and </li>\n\n\n\n<li>typography</li>\n</ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"spacing-and-colors\">Spacing and Colors</h3>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>HTML</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279;\">&quot;spacing&quot;: {</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			&quot;spacingScale&quot;: {</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				&quot;steps&quot;: 0</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			&quot;spacingSizes&quot;: [</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;4px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;4px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;10&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;8px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;8px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;20&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;12px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;12px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;30&quot;</span></span>\n<span class=\"line cbp-see-more-line cbp-see-more-transition\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;16px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;16px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;40&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;24px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;24px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;50&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;32px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;32px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;60&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;48px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;clamp(32px, 4.8vw, 48px)&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;70&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;64px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;clamp(48px, 6.4vw, 64px)&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;80&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;96px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;clamp(64px, 9.6vw, 96px)&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;90&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;128px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;clamp(64px, 12.8vw, 128px)&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;100&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Body Margin (24px)&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;24px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;body-margin&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				}</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			],</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			&quot;units&quot;: [</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				&quot;%&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				&quot;px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				&quot;em&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				&quot;rem&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				&quot;vh&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				&quot;vw&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			]</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		}</span></span></code></pre><div class=\"cbp-see-more-container\"><div style=\"background-color: #faf4ed; height: 50%;\"></div><span class=\"cbp-see-more-simple-btn cbp-see-more-simple-btn-hover\" style=\"color: #36334b; background-color: #efdcc5; padding: 6px 14px; cursor: default; border-radius: 6px;\" tabindex=\"0\">Click to see more</span></div></div>\n</div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>HTML</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279;\">&quot;color&quot;: {</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			&quot;defaultPalette&quot;: false,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			&quot;palette&quot;: [</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;color&quot;: &quot;#FFFFFF&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Base&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;base&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;color&quot;: &quot;#F9F9F9&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Base / Two&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;base-2&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;color&quot;: &quot;#191716&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Contrast&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;contrast&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line cbp-see-more-line \"><span style=\"color: #575279;\">					&quot;color&quot;: &quot;#666666&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Contrast / Two&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;contrast-2&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;color&quot;: &quot;#767676&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Contrast / Three&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;contrast-3&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;color&quot;: &quot;#DADADA&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Contrast / Four&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;contrast-4&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;color&quot;: &quot;#EEEEEE&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Contrast / Five&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;contrast-5&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				}</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			]</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		}</span></span></code></pre><div class=\"cbp-see-more-container\"><div style=\"background-color: #faf4ed; height: 50%;\"></div><span class=\"cbp-see-more-simple-btn cbp-see-more-simple-btn-hover\" style=\"color: #36334b; background-color: #efdcc5; padding: 6px 14px; cursor: default; border-radius: 6px;\" tabindex=\"0\">Click to see more</span></div></div>\n</div>\n</div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"typography\">Typography</h3>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>HTML</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279;\">&quot;fontFamilies&quot;: [</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fontFace&quot;: [</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">						{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;fontFamily&quot;: &quot;Newsreader&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;fontStretch&quot;: &quot;normal&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;fontStyle&quot;: &quot;normal&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;fontWeight&quot;: &quot;200 900&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;src&quot;: [</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">								&quot;file:./assets/fonts/newsreader/newsreader-var.woff2&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							]</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">						},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">						{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;fontFamily&quot;: &quot;Newsreader&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;fontStretch&quot;: &quot;normal&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;fontStyle&quot;: &quot;italic&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;fontWeight&quot;: &quot;200 900&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							&quot;src&quot;: [</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">								&quot;file:./assets/fonts/newsreader/newsreader-var-italic.woff2&quot;</span></span>\n<span class=\"line cbp-see-more-line \"><span style=\"color: #575279;\">							]</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">						}</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					],</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fontFamily&quot;: &quot;\\&quot;Newsreader\\&quot;, ui-serif, \\&quot;Times New Roman\\&quot;, serif&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Newsreader&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;body&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fontFamily&quot;: &quot;ui-sans-serif, -apple-system, BlinkMacSystemFont, \\&quot;Segoe UI\\&quot;, Roboto, \\&quot;Helvetica Neue\\&quot;, sans-serif&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;System Sans-serif&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;system-sans-serif&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fontFamily&quot;: &quot;ui-serif, \\&quot;Times New Roman\\&quot;, serif&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;System Serif&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;system-serif&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				}</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			],</span></span></code></pre><div class=\"cbp-see-more-container\"><div style=\"background-color: #faf4ed; height: 50%;\"></div><span class=\"cbp-see-more-simple-btn cbp-see-more-simple-btn-hover\" style=\"color: #36334b; background-color: #efdcc5; padding: 6px 14px; cursor: default; border-radius: 6px;\" tabindex=\"0\">Click to see more</span></div></div>\n</div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>HTML</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279;\">&quot;fontSizes&quot;: [</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fluid&quot;: false,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;XXS&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;12px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;xx-small&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fluid&quot;: false,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;XS&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;14px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;x-small&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fluid&quot;: false,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Small&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;16px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;small&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line cbp-see-more-line \"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fluid&quot;: false,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Medium&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;18px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;medium&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fluid&quot;: false,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Large&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;21px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;large&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fluid&quot;: {</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">						&quot;max&quot;: &quot;24px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">						&quot;min&quot;: &quot;21px&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;XL&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;24px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;x-large&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fluid&quot;: {</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">						&quot;max&quot;: &quot;32px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">						&quot;min&quot;: &quot;24px&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;XXL&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;32px&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;xx-large&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				},</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;fluid&quot;: false,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;name&quot;: &quot;Massive&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;size&quot;: &quot;clamp( 96px, 19.2vw, 128px )&quot;,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">					&quot;slug&quot;: &quot;massive&quot;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				}</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			],</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			&quot;writingMode&quot;: true</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		}</span></span></code></pre><div class=\"cbp-see-more-container\"><div style=\"background-color: #faf4ed; height: 50%;\"></div><span class=\"cbp-see-more-simple-btn cbp-see-more-simple-btn-hover\" style=\"color: #36334b; background-color: #efdcc5; padding: 6px 14px; cursor: default; border-radius: 6px;\" tabindex=\"0\">Click to see more</span></div></div>\n</div>\n</div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-accent-color has-text-color has-link-color wp-elements-3bf281a348d19a518076a91dab2b33d5\">&#8220;With the theme settings in place, it&#8217;s time to put them to use in block and element-specific styles. This is when the theme starts taking shape. You can do this in the site editor, but it&#8217;s faster to edit theme.json directly. Also, many styles can&#8217;t be changed in the interface,&#8221; Norén wrote.</p>\n</blockquote>\n\n\n\n<p>As the new theme, <em>Pulitzer</em> doesn&#8217;t have any working templates yet, Norén checked the <code>theme.json</code> styles in the Site editor Stylebook view. You get the vibe of the theme. You can also use it to make sure you haven&#8217;t forgotten any styling for core blocks.</p>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot of the Pulitzer theme in the Stylebook \" class=\"wp-image-28488\" height=\"652\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMKuvwxWsAA1Ws4.jpeg?resize=652%2C652&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot of the Pulitzer theme in the Stylebook \" class=\"wp-image-28489\" height=\"652\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMKu13MWcAAk1Lo.jpeg?resize=652%2C652&#038;ssl=1\" width=\"652\" /></figure>\n</figure>\n</div></div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"third-task-templates-and-patterns\">Third task: <strong>Templates and Patterns</strong></h2>\n\n\n\n<p>This is the moment to work on the theme layouts. Norén uses what he calls &#8220;the one indispensable tool in the Block Theming toolbox,&#8221; the <a href=\"https://wordpress.org/plugins/create-block-theme/\">Create Block Theme</a> (CBT) plugin.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Step 1: Make the changes in the site editor.</li>\n\n\n\n<li>Step 2: Save them to the theme with CBT.</li>\n</ul>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-plugin-directory wp-block-embed-plugin-directory\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\"><a href=\"https://wordpress.org/plugins/create-block-theme/\">Create Block Theme</a></blockquote>\n</div></figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"header-and-footer\">Header and Footer</h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-accent-color has-text-color has-link-color wp-elements-88dce5c85c9093f5410ad70883aea48d\">&#8220;When I&#8217;m building a theme, I almost always start with the header and footer. It fools you into thinking the theme is nearly finished. I&#8217;ll wait with the newsletter form and the other Jetpack blocks until all the templates are in place.&#8221; &#8212; Norén shared in his thread.</p>\n</blockquote>\n\n\n\n<div class=\"wp-block-columns alignwide is-style-no-vertical-margin is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column has-light-background-background-color has-background is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large is-style-no-vertical-margin wp-lightbox-container\"><img alt=\"Screenshot of the Pulitzer theme in the editor\" class=\"wp-image-28492\" height=\"491\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMLDVwoXAAA3Q3T.jpeg?resize=652%2C491&#038;ssl=1\" width=\"652\" /><button class=\"lightbox-trigger\" type=\"button\">\n			<svg fill=\"none\" height=\"12\" viewBox=\"0 0 12 12\" width=\"12\" xmlns=\"http://www.w3.org/2000/svg\">\n				<path d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" fill=\"#fff\">\n			</svg>\n		</button></figure>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\">Working in the Site Editor  </p>\n</div>\n\n\n\n<div class=\"wp-block-column has-light-background-background-color has-background is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large is-style-no-vertical-margin wp-lightbox-container\"><img alt=\"Screenshot of the Pulitzer template with the create-block-theme plugin\'s sidebar open\" class=\"wp-image-28491\" height=\"491\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMLDOr9XUAE-1ZE.jpeg?resize=652%2C491&#038;ssl=1\" width=\"652\" /><button class=\"lightbox-trigger\" type=\"button\">\n			<svg fill=\"none\" height=\"12\" viewBox=\"0 0 12 12\" width=\"12\" xmlns=\"http://www.w3.org/2000/svg\">\n				<path d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" fill=\"#fff\">\n			</svg>\n		</button></figure>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\">Saving changes to the theme with CBT </p>\n</div>\n</div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" />\n\n\n\n<p>The header template part is only the container for the hidden-header pattern. The reason to use patterns is that you can add php code. The advantage is that the text wrapped in <code>esc_html_e()</code> function can be translated. See below an example of a group of Navigation links.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"Screenshot of the code building the navigation links\" class=\"wp-image-40324\" height=\"68\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-09-at-14.22.37.png?resize=652%2C68&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<div class=\"wp-block-group alignwide has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-text-align-left\"><strong>Template part: <a href=\"https://github.com/andersnoren/pulitzer/blob/main/parts/header.html\">header.html</a></strong></p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #000000; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #000000;\">&lt;!-- wp:pattern {</span><span style=\"color: #A31515;\">&quot;slug&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;pulitzer/hidden-header&quot;</span><span style=\"color: #000000;\">} /--&gt;</span></span></code></pre></div>\n\n\n\n<div class=\"wp-block-group has-border-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-text-align-center\"><a href=\"https://github.com/andersnoren/pulitzer/blob/97bd67c0b266fde8260e8993718bcdf8c657fb13/patterns/hidden-header.php\">hidden-header.php</a></p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\">Click the arrow to see the Pattern code\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #000000; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #000000;\">&lt;?php</span></span>\n<span class=\"line\"><span style=\"color: #008000;\">/**</span></span>\n<span class=\"line\"><span style=\"color: #008000;\"> * Title: header</span></span>\n<span class=\"line\"><span style=\"color: #008000;\"> * Slug: pulitzer/hidden-header</span></span>\n<span class=\"line\"><span style=\"color: #008000;\"> * Inserter: no</span></span>\n<span class=\"line\"><span style=\"color: #008000;\"> */</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">?&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">&lt;!-- wp:group {</span><span style=\"color: #A31515;\">&quot;align&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;wide&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;style&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;spacing&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;padding&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;top&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;var:preset|spacing|60&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;bottom&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;var:preset|spacing|60&quot;</span><span style=\"color: #000000;\">}},</span><span style=\"color: #A31515;\">&quot;border&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;bottom&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;color&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;var:preset|color|contrast-5&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;width&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;1px&quot;</span><span style=\"color: #000000;\">},</span><span style=\"color: #A31515;\">&quot;top&quot;</span><span style=\"color: #000000;\">:[],</span><span style=\"color: #A31515;\">&quot;right&quot;</span><span style=\"color: #000000;\">:[],</span><span style=\"color: #A31515;\">&quot;left&quot;</span><span style=\"color: #000000;\">:[]}},</span><span style=\"color: #A31515;\">&quot;layout&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;type&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;constrained&quot;</span><span style=\"color: #000000;\">}} --&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">&lt;div </span><span style=\"color: #0000FF;\">class</span><span style=\"color: #000000;\">=</span><span style=\"color: #A31515;\">&quot;wp-block-group alignwide&quot;</span><span style=\"color: #000000;\"> style=</span><span style=\"color: #A31515;\">&quot;border-bottom-color:var(--wp--preset--color--contrast-5);border-bottom-width:1px;padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)&quot;</span><span style=\"color: #000000;\">&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #000000;\">	&lt;!-- wp:columns {</span><span style=\"color: #A31515;\">&quot;isStackedOnMobile&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #0000FF;\">false</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;style&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;spacing&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;blockGap&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;left&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;var:preset|spacing|50&quot;</span><span style=\"color: #000000;\">}}}} --&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">	&lt;div </span><span style=\"color: #0000FF;\">class</span><span style=\"color: #000000;\">=</span><span style=\"color: #A31515;\">&quot;wp-block-columns is-not-stacked-on-mobile&quot;</span><span style=\"color: #000000;\">&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">		</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">		&lt;!-- wp:column {</span><span style=\"color: #A31515;\">&quot;verticalAlignment&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;stretch&quot;</span><span style=\"color: #000000;\">} --&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">		&lt;div </span><span style=\"color: #0000FF;\">class</span><span style=\"color: #000000;\">=</span><span style=\"color: #A31515;\">&quot;wp-block-column is-vertically-aligned-stretch&quot;</span><span style=\"color: #000000;\">&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">			&lt;!-- wp:group {</span><span style=\"color: #A31515;\">&quot;style&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;dimensions&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;minHeight&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;100%&quot;</span><span style=\"color: #000000;\">},</span><span style=\"color: #A31515;\">&quot;spacing&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;blockGap&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;var:preset|spacing|40&quot;</span><span style=\"color: #000000;\">}},</span><span style=\"color: #A31515;\">&quot;layout&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;type&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;flex&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;orientation&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;vertical&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;verticalAlignment&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;space-between&quot;</span><span style=\"color: #000000;\">}} --&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">			&lt;div </span><span style=\"color: #0000FF;\">class</span><span style=\"color: #000000;\">=</span><span style=\"color: #A31515;\">&quot;wp-block-group&quot;</span><span style=\"color: #000000;\"> style=</span><span style=\"color: #A31515;\">&quot;min-height:100%&quot;</span><span style=\"color: #000000;\">&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;!-- wp:group {</span><span style=\"color: #A31515;\">&quot;style&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;spacing&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;blockGap&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;var:preset|spacing|10&quot;</span><span style=\"color: #000000;\">},</span><span style=\"color: #A31515;\">&quot;layout&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;selfStretch&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;fit&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;flexSize&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #0000FF;\">null</span><span style=\"color: #000000;\">}},</span><span style=\"color: #A31515;\">&quot;layout&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;type&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;flex&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;orientation&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;vertical&quot;</span><span style=\"color: #000000;\">}} --&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;div </span><span style=\"color: #0000FF;\">class</span><span style=\"color: #000000;\">=</span><span style=\"color: #A31515;\">&quot;wp-block-group&quot;</span><span style=\"color: #000000;\">&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">					&lt;!-- wp:site-title {</span><span style=\"color: #A31515;\">&quot;level&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #098658;\">0</span><span style=\"color: #000000;\">} /--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">					&lt;!-- wp:site-tagline /--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;!-- /wp:group --&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;!-- wp:navigation {</span><span style=\"color: #A31515;\">&quot;hasIcon&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #0000FF;\">false</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;layout&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;type&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;flex&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;orientation&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;horizontal&quot;</span><span style=\"color: #000000;\">}} --&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;!-- wp:navigation-link {</span><span style=\"color: #A31515;\">&quot;label&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;&lt;?php esc_html_e( \'Blog\', \'pulitzer\' ); ?&gt;&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;url&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;#&quot;</span><span style=\"color: #000000;\">} /--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;!-- wp:navigation-link {</span><span style=\"color: #A31515;\">&quot;label&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;&lt;?php esc_html_e( \'Profile\', \'pulitzer\' ); ?&gt;&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;url&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;#&quot;</span><span style=\"color: #000000;\">} /--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;!-- wp:navigation-link {</span><span style=\"color: #A31515;\">&quot;label&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;&lt;?php esc_html_e( \'Newsletter\', \'pulitzer\' ); ?&gt;&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;url&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;#&quot;</span><span style=\"color: #000000;\">} /--&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #000000;\">				&lt;!-- /wp:navigation --&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #000000;\">			&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">			&lt;!-- /wp:group --&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">		&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">		&lt;!-- /wp:column --&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #000000;\">		&lt;!-- wp:column {</span><span style=\"color: #A31515;\">&quot;width&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;1em&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;layout&quot;</span><span style=\"color: #000000;\">:{</span><span style=\"color: #A31515;\">&quot;type&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;constrained&quot;</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;justifyContent&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;right&quot;</span><span style=\"color: #000000;\">},</span><span style=\"color: #A31515;\">&quot;fontSize&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;massive&quot;</span><span style=\"color: #000000;\">} --&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">		&lt;div </span><span style=\"color: #0000FF;\">class</span><span style=\"color: #000000;\">=</span><span style=\"color: #A31515;\">&quot;wp-block-column has-massive-font-size&quot;</span><span style=\"color: #000000;\"> style=</span><span style=\"color: #A31515;\">&quot;flex-basis:1em&quot;</span><span style=\"color: #000000;\">&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">			&lt;!-- wp:site-logo {</span><span style=\"color: #A31515;\">&quot;width&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #098658;\">128</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;shouldSyncIcon&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #0000FF;\">true</span><span style=\"color: #000000;\">,</span><span style=\"color: #A31515;\">&quot;className&quot;</span><span style=\"color: #000000;\">:</span><span style=\"color: #A31515;\">&quot;is-style-rounded&quot;</span><span style=\"color: #000000;\">} /--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">		&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">		&lt;!-- /wp:column --&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #000000;\">	&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">	&lt;!-- /wp:columns --&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #000000;\">&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #000000;\">&lt;!-- /wp:group --&gt;</span></span></code></pre></div>\n</details>\n</div></div>\n</div></div>\n\n\n\n<p>The same system applied to the template part <a href=\"https://github.com/andersnoren/pulitzer/blob/main/parts/footer.html\">footer.html</a> that includes the <a href=\"https://github.com/andersnoren/pulitzer/blob/main/patterns/hidden-footer.php\">hidden-footer.php</a>.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"archives\">Archives</h3>\n\n\n\n<blockquote class=\"wp-block-quote has-accent-color has-text-color has-link-color has-normal-font-size wp-elements-c97cacc48369e31486ac97fb8d2b8b9c is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;For the <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/line-clamp\">line clamped</a> excerpts, I registered custom block styles for the &#8216;Excerpt&#8217; block and enqueues a CSS file when the block is in use on the page. You can do a lot with <code>theme.json</code> styles, but stuff like this still requires CSS,&#8221; Norén found.</p>\n</blockquote>\n\n\n\n<p><strong>Register_block_style</strong></p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>HTML</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279;\">register_block_style(</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			\'core/post-excerpt\',</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			array(</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				\'name\'	=&gt; \'pulitzer-clamp-lines-2\',</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				\'label\'	=&gt; __( \'Clamp: 2 lines\', \'pulitzer\' )</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			)</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #575279;\">		register_block_style(</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			\'core/post-excerpt\',</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			array(</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				\'name\'	=&gt; \'pulitzer-clamp-lines-3\',</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				\'label\'	=&gt; __( \'Clamp: 3 lines\', \'pulitzer\' )</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			)</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		);</span></span></code></pre></div>\n\n\n\n<p><strong>CSS for post/excerpt clamp lines styles</strong></p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>HTML</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #575279;\">[class*=&quot;is-style-pulitzer-clamp-lines-&quot;] p:first-child {</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	display: -webkit-box;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	-webkit-box-orient: vertical;  </span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	overflow: hidden;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #575279;\">.is-style-pulitzer-clamp-lines-2 p:first-child {</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	-webkit-line-clamp: 2;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #575279;\">.is-style-pulitzer-clamp-lines-3 p:first-child {</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	-webkit-line-clamp: 3;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">}</span></span></code></pre></div>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full\"><img alt=\"List of post with a read time block and a standardized excerpt block \" class=\"wp-image-40287\" height=\"370\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/posts.webp?resize=652%2C370&#038;ssl=1\" width=\"652\" /></figure>\n</div></div>\n\n\n\n<p>For basic steps on block styles, you should read my tutorial. It is titled <a href=\"https://wordpress.com/blog/2025/05/07/custom-block-styles/\">Mastering Custom Block Styles in WordPress: 6 Methods for Theme and Plugin Developers</a>.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"alternative-post-layouts\">Alternative post layouts</h3>\n\n\n\n<p>Norén followed a tutorial on the WordPress Developer Blog: <a href=\"https://developer.wordpress.org/news/2023/06/upgrading-the-site-editing-experience-with-custom-template-part-areas/\">Upgrading the site-editing experience with custom template part areas</a> by Justin Tadlock. He added different post layouts as template parts. They are registered to a custom &#8220;posts&#8221; template parts area.</p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot of a post laytout with the featured image\" class=\"wp-image-28497\" height=\"509\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMLsJPuWIAAcsFf.jpeg?resize=652%2C509&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot of the list of post with standardizes excerpt length\" class=\"wp-image-28498\" height=\"509\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMLtkwhWcAA-cIi.jpeg?resize=652%2C509&#038;ssl=1\" width=\"652\" /></figure>\n</figure>\n\n\n\n<blockquote class=\"wp-block-quote has-accent-color has-text-color has-link-color wp-elements-d8316e02f2209338b15810f2859d356d is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;It&#8217;s a shame that you can&#8217;t use the &#8216;Choose a header/footer&#8217; modal for custom template part areas yet. It would make switching between template parts a lot more intuitive. There&#8217;s an open issue for it here: <a href=\"https://github.com/WordPress/gutenberg/issues/44689\">Add support for replacing &#8220;general&#8221; template parts</a>,&#8221; Norén discovered.</p>\n</blockquote>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Examples of the modal to select a header pattern\" class=\"wp-image-28499\" height=\"322\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMLtPdrWoAA0DWK.jpeg?resize=652%2C322&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<p>The extra post layouts were created as patterns to be added into the respective template parts. </p>\n\n\n\n<p>The patterns are in separate files in <a href=\"https://github.com/andersnoren/pulitzer/tree/main/patterns\">the patterns folder</a> prefixed with <code>hidden-posts</code>&#8211; with the settings: <code>Categories: hidden</code> and <code>Inserter: no</code></p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped has-accent-background-color has-background wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img alt=\"File list of alternative post layouts in the Pulitzer them\" class=\"wp-image-40288\" height=\"139\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-08-at-15.49.38.png?resize=288%2C139&#038;ssl=1\" width=\"288\" /></figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img alt=\"Header example of a hidden pattern of the Pulitzer theme\" class=\"wp-image-40321\" height=\"164\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-08-at-16.13.48.png?resize=282%2C164&#038;ssl=1\" width=\"282\" /></figure>\n</figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"404-template-and-the-search-block\">404-template and the Search block</h3>\n\n\n\n<p>For the 404-template, the search form is loaded as a hidden pattern, both here and in the search template. This ensures that styling and translatable strings stay consistent.</p>\n\n\n\n<p>This is a great example for nesting template parts and patterns.</p>\n\n\n\n<p>The Search pattern is the smallest unit. It is included in the 404 pattern. Then, with the header and footer template parts, it is included in the 404.html template.</p>\n\n\n\n<p><strong>The 404 Template schematic</strong></p>\n\n\n\n<div class=\"wp-block-group is-style-default has-border-background-color has-background is-layout-grid wp-container-core-group-is-layout-6be84c55 wp-block-group-is-layout-grid\">\n<p class=\"has-text-align-center is-style-no-vertical-margin has-body-background-color has-accent-background-color has-text-color has-background has-link-color wp-elements-f64a79b1c5ecf3cd21e63ba8087f9b44 wp-container-content-93ed1c69\">Header </p>\n\n\n\n<div class=\"wp-block-group is-style-no-vertical-margin has-light-background-background-color has-background wp-container-content-72181cf1\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-text-align-center is-style-default has-large-font-size\">404 Pattern</p>\n\n\n\n<div class=\"wp-block-group is-style-no-vertical-margin has-border-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-text-align-center is-style-no-vertical-margin\">Search Pattern </p>\n</div></div>\n</div></div>\n\n\n\n<p class=\"has-text-align-center is-style-no-vertical-margin has-body-background-color has-secondary-background-color has-text-color has-background has-link-color wp-elements-db4260759a82ec8ae131839137b18ea7 wp-container-content-93ed1c69\">Footer </p>\n</div>\n\n\n\n<p><strong>Search Pattern</strong></p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #286983;\">&lt;?php</span></span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic;\">/**</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Title: Search</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Slug: pulitzer/hidden-search</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Inserter: no</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> </span><span style=\"color: #797593; font-style: italic;\">*/</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">?&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp:search</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">							 </span><span style=\"color: #EA9D34;\">&quot;label&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;&lt;?php echo esc_attr_x( \'Search\', \'search form label\', \'pulitzer\' ); ?&gt;&quot;</span><span style=\"color: #797593;\">,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">               </span><span style=\"color: #EA9D34;\">&quot;showLabel&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #D7827E;\">false</span><span style=\"color: #797593;\">,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">               </span><span style=\"color: #EA9D34;\">&quot;placeholder&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;&lt;?php echo esc_attr_x( \'Search for...\', \'search form placeholder\', \'pulitzer\' ); ?&gt;&quot;</span><span style=\"color: #797593;\">,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">               </span><span style=\"color: #EA9D34;\">&quot;buttonText&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;&lt;?php echo esc_attr_x( \'Search\', \'search button text\', \'pulitzer\' ); ?&gt;&quot;</span><span style=\"color: #797593;\">,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">               </span><span style=\"color: #EA9D34;\">&quot;buttonPosition&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;button-inside&quot;</span><span style=\"color: #797593;\">,</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">               </span><span style=\"color: #EA9D34;\">&quot;buttonUseIcon&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #D7827E;\">true</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">                </span><span style=\"color: #797593;\">}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/--&gt;</span></span></code></pre></div>\n\n\n\n<p><strong>404-Page Pattern</strong></p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #286983;\">&lt;?php</span></span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic;\">/**</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Title: 404</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Slug: pulitzer/hidden-404</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Inserter: no</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> </span><span style=\"color: #797593; font-style: italic;\">*/</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">?&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp:group</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;style&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;spacing&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;blockGap&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;var:preset|spacing|40&quot;</span><span style=\"color: #797593;\">}},</span><span style=\"color: #EA9D34;\">&quot;layout&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;type&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;constrained&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;contentSize&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;21em&quot;</span><span style=\"color: #797593;\">}}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;div</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">class=</span><span style=\"color: #EA9D34;\">&quot;wp-block-group&quot;</span><span style=\"color: #286983;\">&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp:heading</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;textAlign&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;center&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;level&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #D7827E;\">1</span><span style=\"color: #797593;\">}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">&lt;h1</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">class=</span><span style=\"color: #EA9D34;\">&quot;wp-block-heading has-text-align-center&quot;</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">id=</span><span style=\"color: #EA9D34;\">&quot;page-not-found&quot;</span><span style=\"color: #286983;\">&gt;&lt;?php</span><span style=\"color: #575279;\"> </span><span style=\"color: #B4637A; font-style: italic;\">echo</span><span style=\"color: #575279;\"> </span><span style=\"color: #D7827E;\">esc_html_x</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'Error 404\'</span><span style=\"color: #797593;\">,</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'Heading for a webpage that is not found\'</span><span style=\"color: #797593;\">,</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'pulitzer\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">);</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">?&gt;&lt;/h1&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/wp:heading</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp:paragraph</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;align&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;center&quot;</span><span style=\"color: #797593;\">}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">&lt;p</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">class=</span><span style=\"color: #EA9D34;\">&quot;has-text-align-center&quot;</span><span style=\"color: #286983;\">&gt;&lt;?php</span><span style=\"color: #575279;\"> </span><span style=\"color: #B4637A; font-style: italic;\">echo</span><span style=\"color: #575279;\"> </span><span style=\"color: #D7827E;\">esc_html_x</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'We can’t find the page you’re looking for. Go back to the front page, or try the search form below.\'</span><span style=\"color: #797593;\">,</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'Message to convey that a webpage could not be found\'</span><span style=\"color: #797593;\">,</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'pulitzer\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">);</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">?&gt;&lt;/p&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/wp:paragraph</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/wp:group</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">group</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;layout&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;type&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;constrained&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;contentSize&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;240px&quot;</span><span style=\"color: #797593;\">}}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #286983;\">&lt;div</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">class=</span><span style=\"color: #EA9D34;\">&quot;wp-block-group&quot;</span><span style=\"color: #286983;\">&gt;</span></span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">pattern</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;slug&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;pulitzer/hidden-search&quot;</span><span style=\"color: #797593;\">}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/--&gt;</span></span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #286983;\">&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">group</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span></code></pre></div>\n\n\n\n<p><strong>404-Page Template</strong></p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">template-part</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;slug&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;header&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;area&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;header&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;tagName&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;header&quot;</span><span style=\"color: #797593;\">}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/--&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">group</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;tagName&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;main&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;align&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;full&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;style&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;spacing&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;padding&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;top&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;var:preset|spacing|100&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;bottom&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;var:preset|spacing|100&quot;</span><span style=\"color: #797593;\">}}},</span><span style=\"color: #EA9D34;\">&quot;layout&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;type&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;constrained&quot;</span><span style=\"color: #797593;\">}}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;main</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">class=</span><span style=\"color: #EA9D34;\">&quot;wp-block-group alignfull&quot;</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">style=</span><span style=\"color: #EA9D34;\">&quot;padding-top:var(--wp--preset--spacing--100);padding-bottom:var(--wp--preset--spacing--100)&quot;</span><span style=\"color: #286983;\">&gt;</span></span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">pattern</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;slug&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;pulitzer/hidden-404&quot;</span><span style=\"color: #797593;\">}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;/main&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">group</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">template-part</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;slug&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;footer&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;area&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;footer&quot;</span><span style=\"color: #797593;\">,</span><span style=\"color: #EA9D34;\">&quot;tagName&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;footer&quot;</span><span style=\"color: #797593;\">}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/--&gt;</span></span></code></pre></div>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-large\"><img alt=\"Screenshot of the 404-Page in the Pulitzer theme\" class=\"wp-image-40301\" height=\"575\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/GMMXgIiWwAEoM8f-edited-1.jpeg?resize=652%2C575&#038;ssl=1\" width=\"652\" /></figure>\n</div></div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fourth-task-handling-blocks\">Fourth task: handling blocks</h2>\n\n\n\n<p>There are specific blocks outside core blocks that need more than styling. Some php code will definitely be involved:</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"jetpack-blocks\">Jetpack blocks</h3>\n\n\n\n<p>For Jetpack blocks, conditional output is simple since the plugin registers blocks only when modules are active. Norén implemented a helper function to check if blocks are registered before using them in pattern PHP files.</p>\n\n\n\n<p>In functions.php Norén created a helper function to check if a certain block is available <code><a href=\"https://github.com/andersnoren/pulitzer/blob/97bd67c0b266fde8260e8993718bcdf8c657fb13/functions.php#L223\">pulitzer_is_block_registered()</a></code>.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #797593; font-style: italic;\">/**</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Check if a block is registered.</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> </span><span style=\"color: #797593; font-style: italic;\">*/</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">if</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">!</span><span style=\"color: #575279;\"> </span><span style=\"color: #B4637A; font-style: italic;\">function_exists</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'pulitzer_is_block_registered\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">)</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">)</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">:</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #797593; font-style: italic;\">/**</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 * Check if a block is registered</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 *</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 * </span><span style=\"color: #286983; font-style: italic;\">@since</span><span style=\"color: #9893A5; font-style: italic;\"> Pulitzer 1.0</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 * </span><span style=\"color: #286983; font-style: italic;\">@return</span><span style=\"color: #9893A5; font-style: italic;\"> </span><span style=\"color: #286983; font-style: italic;\">bool</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 </span><span style=\"color: #797593; font-style: italic;\">*/</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">function</span><span style=\"color: #575279;\"> </span><span style=\"color: #D7827E;\">pulitzer_is_block_registered</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593; font-style: italic;\">$</span><span style=\"color: #575279; font-style: italic;\">block_name</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">)</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		</span><span style=\"color: #797593; font-style: italic;\">$</span><span style=\"color: #575279; font-style: italic;\">registry</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">=</span><span style=\"color: #575279;\"> </span><span style=\"color: #56949F;\">WP_Block_Type_Registry</span><span style=\"color: #286983;\">::</span><span style=\"color: #D7827E;\">get_instance</span><span style=\"color: #797593;\">();</span></span>\n<span class=\"line\"><span style=\"color: #575279;\"> 		</span><span style=\"color: #286983;\">return</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593; font-style: italic;\">$</span><span style=\"color: #575279; font-style: italic;\">registry</span><span style=\"color: #286983;\">-&gt;</span><span style=\"color: #D7827E;\">get_registered</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593; font-style: italic;\">$</span><span style=\"color: #575279; font-style: italic;\">block_name</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">);</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #797593;\">}</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">endif</span><span style=\"color: #797593;\">;</span></span></code></pre></div>\n\n\n\n<p>This helper function is then available for the conditional check in the pattern: </p>\n\n\n\n<p>Examples for the <code>jetpack/like</code> button. You can inspect the whole code for the <a href=\"https://github.com/andersnoren/pulitzer/blob/main/patterns/hidden-single-sharing-row.php\">hidden-single sharing-row</a> pattern on GitHub.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #286983;\">&lt;?php</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">if</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #D7827E;\">pulitzer_is_block_registered</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'jetpack/like\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">)</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">)</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">:</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">?&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp:group</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span><span style=\"color: #EA9D34;\">&quot;style&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;spacing&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;padding&quot;</span><span style=\"color: #797593;\">:{</span><span style=\"color: #EA9D34;\">&quot;top&quot;</span><span style=\"color: #797593;\">:</span><span style=\"color: #EA9D34;\">&quot;6px&quot;</span><span style=\"color: #797593;\">}}}}</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			</span><span style=\"color: #286983;\">&lt;div</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">class=</span><span style=\"color: #EA9D34;\">&quot;wp-block-group&quot;</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">style=</span><span style=\"color: #EA9D34;\">&quot;padding-top:6px&quot;</span><span style=\"color: #286983;\">&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">jetpack/like</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			</span><span style=\"color: #286983;\">&lt;/div&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			</span><span style=\"color: #286983;\">&lt;!--</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">/wp</span><span style=\"color: #797593;\">:</span><span style=\"color: #286983;\">group</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">&lt;?php</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">endif</span><span style=\"color: #797593;\">;</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">?&gt;</span></span></code></pre></div>\n\n\n\n<p>For the like button, share buttons and newsletter signup, he utilized styled versions of Jetpack blocks. <a href=\"https://github.com/andersnoren/pulitzer/blob/97bd67c0b266fde8260e8993718bcdf8c657fb13/functions.php#L147\">Using block stylesheet registration</a> ensures the CSS is loaded only when a block is in use.</p>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-large\"><img alt=\"\" class=\"wp-image-40318\" height=\"425\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/GMKJPpHW8AAzSWZ-edited.png?resize=652%2C425&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<p></p>\n</div></div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-bindings-api-blocks\">Block Bindings API blocks</h3>\n\n\n\n<p>In the final version, Pulitzer includes three use cases of the Block Binding API:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Number of comments on a post, with a link to the post comments form.</li>\n\n\n\n<li>Reading time of a post.</li>\n\n\n\n<li>Current year next to the copyright note in the footer.</li>\n</ul>\n\n\n\n<blockquote class=\"wp-block-quote has-accent-color has-text-color has-link-color has-normal-font-size wp-elements-af3f0be7f306bd6cfef399051d4551f2 is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;Wow. Those of you who said the new Block bindings API is easy to use weren&#8217;t kidding. It took me all of 40 mins to get the reading time and copyright year blocks up and running, having never touched it before. Game changer.&#8221;</p>\n<cite>Anders Norén</cite></blockquote>\n\n\n\n<p>The two blog posts that helped Norén to catch up on the feature:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://t.co/QbCJimRQzF\"><strong>Introducing Block Bindings, Part 1: Connecting Custom Fields</strong></a> by Justin Tadlock</li>\n\n\n\n<li><a href=\"https://make.wordpress.org/core/2024/03/06/new-feature-the-block-bindings-api/\"><strong>New Feature: The Block Bindings API</strong></a> by Artemio Morales. </li>\n</ul>\n\n\n\n<p><a href=\"https://github.com/andersnoren/pulitzer/blob/97bd67c0b266fde8260e8993718bcdf8c657fb13/functions.php#L240\">The php code is in functions.php, starting line 240</a></p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"the-copyright-year-in-the-footer\"><strong>The copyright year in the footer</strong></h3>\n\n\n\n<p><strong>Step one: register the block binding and its callback in functions.php</strong>.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #286983;\">function</span><span style=\"color: #575279;\"> </span><span style=\"color: #D7827E;\">pulitzer_register_block_bindings</span><span style=\"color: #797593;\">()</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span></span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic;\">/*</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">		 * Copyright character with current year.</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">		 </span><span style=\"color: #797593; font-style: italic;\">*/</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		</span><span style=\"color: #D7827E;\">register_block_bindings_source</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			</span><span style=\"color: #EA9D34;\">\'pulitzer/copyright-year\'</span><span style=\"color: #797593;\">,</span><span style=\"color: #575279;\"> </span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			</span><span style=\"color: #B4637A; font-style: italic;\">array</span><span style=\"color: #797593;\">(</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				</span><span style=\"color: #EA9D34;\">\'label\'</span><span style=\"color: #575279;\">              </span><span style=\"color: #286983;\">=&gt;</span><span style=\"color: #575279;\"> </span><span style=\"color: #D7827E;\">__</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'Copyright year\'</span><span style=\"color: #797593;\">,</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'pulitzer\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">),</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">				</span><span style=\"color: #EA9D34;\">\'get_value_callback\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">=&gt;</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'pulitzer_block_binding_callback_copyright_year\'</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			</span><span style=\"color: #797593;\">)</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		</span><span style=\"color: #797593;\">);</span></span>\n<span class=\"line\"><span style=\"color: #797593;\">}</span></span>\n<span class=\"line\"><span style=\"color: #D7827E;\">add_action</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'init\'</span><span style=\"color: #797593;\">,</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'pulitzer_register_block_bindings\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">);</span></span></code></pre></div>\n\n\n\n<p><strong>Step two: create the callback function reference in the step before.</strong></p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>pulitzer_block_binding_callback_copyright_year</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #797593; font-style: italic;\">/*</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Block bindings callback:</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> * Copyright character with current year.</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\"> </span><span style=\"color: #797593; font-style: italic;\">*/</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">if</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">!</span><span style=\"color: #575279;\"> </span><span style=\"color: #B4637A; font-style: italic;\">function_exists</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'pulitzer_block_binding_callback_copyright_year\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">)</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">)</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">:</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #797593; font-style: italic;\">/**</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 * Block bindings callback</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 * Copyright character with current year</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 *</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 * </span><span style=\"color: #286983; font-style: italic;\">@since</span><span style=\"color: #9893A5; font-style: italic;\"> Pulitzer 1.0</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 * </span><span style=\"color: #286983; font-style: italic;\">@return</span><span style=\"color: #9893A5; font-style: italic;\"> </span><span style=\"color: #286983; font-style: italic;\">string</span></span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic;\">	 </span><span style=\"color: #797593; font-style: italic;\">*/</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #286983;\">function</span><span style=\"color: #575279;\"> </span><span style=\"color: #D7827E;\">pulitzer_block_binding_callback_copyright_year</span><span style=\"color: #797593;\">()</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">{</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">		</span><span style=\"color: #286983;\">return</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'© \'</span><span style=\"color: #575279;\"> </span><span style=\"color: #286983;\">.</span><span style=\"color: #575279;\"> </span><span style=\"color: #B4637A; font-style: italic;\">date</span><span style=\"color: #797593;\">(</span><span style=\"color: #575279;\"> </span><span style=\"color: #EA9D34;\">\'Y\'</span><span style=\"color: #575279;\"> </span><span style=\"color: #797593;\">);</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">	</span><span style=\"color: #797593;\">}</span></span>\n<span class=\"line\"><span style=\"color: #286983;\">endif</span><span style=\"color: #797593;\">;</span></span>\n<span class=\"line\"></span></code></pre></div>\n\n\n\n<p><strong>Step three: add the block to the pattern</strong>.</p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>HTML</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #797593; font-style: italic;\">&lt;!--</span><span style=\"color: #9893A5; font-style: italic;\"> wp:paragraph {&quot;metadata&quot;:{&quot;bindings&quot;:{&quot;content&quot;:{&quot;source&quot;:&quot;pulitzer/copyright-year&quot;}}}} </span><span style=\"color: #797593; font-style: italic;\">--&gt;</span></span>\n<span class=\"line\"><span style=\"color: #575279;\">			</span><span style=\"color: #9893A5;\">&lt;</span><span style=\"color: #56949F;\">p</span><span style=\"color: #9893A5;\">&gt;</span><span style=\"color: #B4637A;\">&lt;</span><span style=\"color: #575279;\">?php esc_html_e(\'© [year]\', \'pulitzer\');?&gt;</span><span style=\"color: #9893A5;\">&lt;/</span><span style=\"color: #56949F;\">p</span><span style=\"color: #9893A5;\">&gt;</span></span>\n<span class=\"line\"><span style=\"color: #797593; font-style: italic;\">&lt;!--</span><span style=\"color: #9893A5; font-style: italic;\"> /wp:paragraph </span><span style=\"color: #797593; font-style: italic;\">--&gt;</span></span></code></pre></div>\n\n\n\n<div class=\"wp-block-group has-light-background-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full\"><img alt=\"Close up of the dynamic Copyright block in the footer of the Pulitzer theme\" class=\"wp-image-40333\" height=\"104\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-09-at-15.43.18.png?resize=383%2C104&#038;ssl=1\" width=\"383\" /></figure>\n</div></div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"reading-time\">Reading Time </h3>\n\n\n\n<p>Justin Tadlock kindly offered Norén to use <a href=\"https://github.com/x3p0-dev/x3p0-ideas/blob/master/src/Bindings/Post.php#L84-L137\">his code for calculating reading time</a>.</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-accent-color has-text-color has-link-color wp-elements-8869475fd7bf672f661db0a03c21d924\">&#8220;I&#8217;ve been using his PHP snippets for 15+ years, so why stop now?&#8221; &#8212; Norén</p>\n</blockquote>\n\n\n\n<p>Functions.php is your first location to find out how <a href=\"https://github.com/andersnoren/pulitzer/blob/97bd67c0b266fde8260e8993718bcdf8c657fb13/functions.php#L275\">this block binding was created.</a> You can also see what the <a href=\"https://github.com/andersnoren/pulitzer/blob/97bd67c0b266fde8260e8993718bcdf8c657fb13/functions.php#L337\">callback function does.</a> Then, look into any of the post patterns to see <a href=\"https://github.com/andersnoren/pulitzer/blob/97bd67c0b266fde8260e8993718bcdf8c657fb13/patterns/hidden-posts.php#L26\">how it is used</a> there.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"comments-count\">Comments count </h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"Single post view of the list of posts of the Pulitzer theme\" class=\"wp-image-28517\" height=\"236\" src=\"https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMPsHwlXsAMHLa3.jpeg?resize=652%2C236&#038;ssl=1\" width=\"652\" /></figure>\n\n\n\n<blockquote class=\"wp-block-quote has-accent-color has-text-color has-link-color wp-elements-e85aae19b9b1f711b7a643bf7ed49aba is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-accent-color has-text-color has-link-color wp-elements-10b0b56d9572aaab3748645a5aeb4932\">&#8220;I decided to add one for the comments count link on the archive pages as well. It&#8217;s crazy that a &#8220;X comments&#8221; block linking to the comments field hasn&#8217;t landed in Core yet. (It&#8217;s in Gutenberg). Slippery slope? Maybe, but I&#8217;m on a deadline, so that&#8217;s for another day.&#8221; &#8212; Anders Norén</p>\n</blockquote>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\"><span>PHP</span><span class=\"code-block-pro-copy-button\" style=\"color: #575279; display: none;\" tabindex=\"0\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"with-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path class=\"without-check\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2