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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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 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;"> </span><span style="color: #286983;">*</span><span style="color: #575279;"> </span><span style="color: #286983;">Block</span><span style="color: #575279;"> </span><span style="color: #286983;">bindings</span><span style="color: #575279;"> </span><span style="color: #286983;">callback</span><span style="color: #797593;">:</span></span>\n<span class="line"><span style="color: #575279;"> </span><span style="color: #286983;">*</span><span style="color: #575279;"> </span><span style="color: #286983;">Post</span><span style="color: #575279;"> </span><span style="color: #286983;">comments</span><span style="color: #575279;"> </span><span style="color: #286983;">count</span><span style="color: #286983;">.</span></span>\n<span class="line"><span style="color: #575279;"> </span><span style="color: #286983;">*/</span></span>\n<span class="line"></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_post_comments_count''</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;">	 * Post comments count.</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_post_comments_count</span><span style="color: #797593;">(</span><span style="color: #575279;"> </span><span style="color: #286983;">array</span><span style="color: #575279;"> </span><span style="color: #797593; font-style: italic;">$</span><span style="color: #575279; font-style: italic;">source_args</span><span style="color: #797593;">,</span><span style="color: #575279;"> </span><span style="color: #56949F;">WP_Block</span><span style="color: #575279;"> </span><span style="color: #797593; font-style: italic;">$</span><span style="color: #575279; font-style: italic;">block_instance</span><span style="color: #797593;">,</span><span style="color: #575279;"> </span><span style="color: #286983;">string</span><span style="color: #575279;"> </span><span style="color: #797593; font-style: italic;">$</span><span style="color: #575279; font-style: italic;">attribute_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;">post_id</span><span style="color: #575279;"> </span><span style="color: #286983;">=</span><span style="color: #575279;"> </span><span style="color: #797593; font-style: italic;">$</span><span style="color: #575279; font-style: italic;">block_instance</span><span style="color: #286983;">-&gt;</span><span style="color: #575279; font-style: italic;">context</span><span style="color: #797593;">[</span><span style="color: #EA9D34;">''postId''</span><span style="color: #797593;">]</span><span style="color: #575279;"> </span><span style="color: #286983;">??</span><span style="color: #575279;"> </span><span style="color: #D7827E;">get_the_ID</span><span style="color: #797593;">();</span></span>\n<span class="line"></span>\n<span class="line"><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: #286983;">!</span><span style="color: #575279;"> </span><span style="color: #D7827E;">comments_open</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;">post_id</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;">return</span><span style="color: #575279;"> </span><span style="color: #D7827E;">false</span><span style="color: #797593;">;</span></span>\n<span class="line"></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;">comments_link</span><span style="color: #575279;"> </span><span style="color: #286983;">=</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">''&lt;a class=&quot;pulitzer-comment-count-link&quot; href=&quot;''</span><span style="color: #575279;"> </span><span style="color: #286983;">.</span><span style="color: #575279;"> </span><span style="color: #D7827E;">esc_url</span><span style="color: #797593;">(</span><span style="color: #575279;"> </span><span style="color: #D7827E;">get_comments_link</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;">post_id</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: #EA9D34;">''&quot;&gt;''</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;">comments_link</span><span style="color: #575279;"> </span><span style="color: #286983;">.=</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">''&lt;span class=&quot;count&quot;&gt;''</span><span style="color: #575279;"> </span><span style="color: #286983;">.</span><span style="color: #575279;"> </span><span style="color: #D7827E;">esc_html</span><span style="color: #797593;">(</span><span style="color: #575279;"> </span><span style="color: #D7827E;">get_comments_number</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;">post_id</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: #EA9D34;">''&lt;/span&gt;''</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;">comments_link</span><span style="color: #575279;"> </span><span style="color: #286983;">.=</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">''&lt;/a&gt;''</span><span style="color: #797593;">;</span></span>\n<span class="line"></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;">comments_link</span><span style="color: #797593;">;</span></span>\n<span class="line"></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>It&#8217;s one of the rare moments you need to look into the <a href="https://github.com/andersnoren/pulitzer/blob/97bd67c0b266fde8260e8993718bcdf8c657fb13/style.css#L88">theme&#8217;s <code>style.css</code></a> to find the styling for the comment count bubble. </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-585ecd19e40399cee9a43b313f3d01ee">&#8220;Rare is the block theme where you don&#8217;t end up creating at least one issue in the Gutenberg repo, or think you ought to. Turns out the <code>hasIcon:false</code> setting for the navigation block only works if the navigation doesn&#8217;t have any styles set. (<a href="https://github.com/WordPress/gutenberg/issues/61181">61181</a>)&#8221; &#8211; Anders Norén</p>\n</blockquote>\n\n\n\n<h2 class="wp-block-heading" id="fifth-task-patterns">Fifth Task: Patterns</h2>\n\n\n\n<p>In block themes, patterns are simply PHP files in the <code>/patterns/</code> folder. </p>\n\n\n\n<p>You can study the code for the Patterns by following the GitHub links. As mentioned above, Norén uses small php snippets with his text strings, to allow for translations.</p>\n\n\n\n<p>Here is an example:</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<pre class="wp-block-code has-000000-color has-text-color has-875-rem-font-size"><code>&lt;!-- wp:paragraph {"fontSize":"large"} --&gt;\n&lt;p class="has-large-font-size"&gt;<strong>&lt;?php esc_html_e( ''I have a long and storied career in the newspaper and publishing industry behind me. Testimonials are available by request.'', ''pulitzer'' ); ?&gt;</strong>&lt;/p&gt;\n&lt;!-- /wp:paragraph --&gt;</code></pre>\n</div></div>\n\n\n\n<p>Learn more about preparing a theme to be used with multiple languages in the <a href="https://developer.wordpress.org/themes/advanced-topics/internationalization/">Theme Handbook &gt; Advanced topics &gt; Internationalization</a>.</p>\n\n\n\n<h3 class="wp-block-heading" id="the-newsletter-page-pattern">The newsletter page pattern</h3>\n\n\n\n<p><a href="https://pulitzer.andersnoren.se/subscriptions-form/">See Demo page</a> &#8211; <a href="https://github.com/andersnoren/pulitzer/blob/main/patterns/page-newsletter.php">Code on GitHub</a></p>\n\n\n\n<figure class="wp-block-image size-full is-resized"><img alt="Close up of the Newsletter signup pattern of the Pulitzer theme" class="wp-image-40305" height="418" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-08-at-18.09.39.png?resize=581%2C418&#038;ssl=1" style="width: 550px; height: auto;" width="581" /></figure>\n\n\n\n<h3 class="wp-block-heading" id="the-resume-page-pattern">The resume page pattern</h3>\n\n\n\n<p>The resume list is separate. It can be added on its own to an existing page. It can also be modified for a different historical timeline.</p>\n\n\n\n<p><a href="https://pulitzer.andersnoren.se/curriculum-vitae/">See Demo Page</a>  | <a href="https://github.com/andersnoren/pulitzer/blob/main/patterns/page-resume.php">Code view on GitHub</a> | <a href="https://github.com/andersnoren/pulitzer/blob/main/patterns/general-resume-list.php">Code Resume List Pattern</a></p>\n\n\n\n<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">\n<figure class="wp-block-image size-large"><img alt="Screenshot of the Curriculum Vitae page made with the Pulitzer theme" class="wp-image-28521" height="639" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMQS6rlXkAEl5ej.jpeg?resize=652%2C639&#038;ssl=1" width="652" /></figure>\n</figure>\n\n\n\n<h3 class="wp-block-heading" id="contact-page-pattern">Contact Page Pattern</h3>\n\n\n\n<p>Patterns are PHP files. You can use loops to output recurring block layouts. This includes layouts like the stack of five columns used to list contact approaches in the Contact page pattern. It makes the patterns easier to maintain.</p>\n\n\n\n<p>On GitHub: <a href="https://github.com/andersnoren/pulitzer/blob/main/patterns/general-contact-list.php">Contact List Pattern</a> | <a href="https://github.com/andersnoren/pulitzer/blob/main/patterns/page-contact.php">Contact Page Pattern</a> </p>\n\n\n\n<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex">\n<figure class="wp-block-image size-large"><img alt="Screenshot of Contact page in the Pulitzer theme" class="wp-image-40308" height="606" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/GMQXaJlXsAAJAPr-edited.jpeg?resize=652%2C606&#038;ssl=1" width="652" /></figure>\n</figure>\n\n\n\n<h2 class="wp-block-heading" id="sixth-task-style-variations">Sixth Task: Style Variations</h2>\n\n\n\n<p>On to theme style variations! These are included as <code>/styles/[name].json</code> files in block themes. Users can select them at <em>Editor → Styles</em>. Theme style variations can modify just about anything set in theme.json, but Norén was sticking to a single simple <strong>Inverted</strong> style for 1.0. Later he added two more styles, &#8220;Humanist&#8221; and &#8220;Parchment.&#8221;</p>\n\n\n\n<figure class="wp-block-image size-large"><img alt="Screenshot of Pulitzer Theme with Inverted Style Variation. " class="wp-image-28527" height="586" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMQpkpmXQAAJtgV.jpeg?resize=652%2C586&#038;ssl=1" width="652" /></figure>\n\n\n\n<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers"><span>Inverted.json</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;">{</span></span>\n<span class="line"><span style="color: #575279;">	</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">settings</span><span style="color: #797593;">&quot;</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;">&quot;</span><span style="color: #56949F;">color</span><span style="color: #797593;">&quot;</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;">&quot;</span><span style="color: #56949F;">palette</span><span style="color: #797593;">&quot;</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;">{</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">color</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;#111111&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">name</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;Base&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">slug</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;base&quot;</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: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">color</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;#161616&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">name</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;Base / Two&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">slug</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;base-2&quot;</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: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">color</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;#FFFFFF&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">name</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;Contrast&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">slug</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;contrast&quot;</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: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">color</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;#7F7F7F&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">name</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;Contrast / Two&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">slug</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;contrast-2&quot;</span></span>\n<span class="line cbp-see-more-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: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">color</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;#616161&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">name</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;Contrast / Three&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">slug</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;contrast-3&quot;</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: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">color</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;#4A4A4A&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">name</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;Contrast / Four&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">slug</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;contrast-4&quot;</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: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">color</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;#222222&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">name</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;Contrast / Five&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">					</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">slug</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;contrast-5&quot;</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: #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: #575279;">    </span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">title</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;Inverted&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">	</span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">$schema</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #EA9D34;">&quot;https://schemas.wp.org/trunk/theme.json&quot;</span><span style="color: #797593;">,</span></span>\n<span class="line"><span style="color: #575279;">    </span><span style="color: #797593;">&quot;</span><span style="color: #56949F;">version</span><span style="color: #797593;">&quot;</span><span style="color: #797593;">:</span><span style="color: #575279;"> </span><span style="color: #D7827E;">2</span></span>\n<span class="line"><span style="color: #797593;">}</span></span></code></pre></div>\n\n\n\n<h2 class="wp-block-heading" id="seventh-task-submit-to-the-repository">Seventh Task: Submit to the Repository</h2>\n\n\n\n<blockquote class="wp-block-quote has-accent-color has-text-color has-link-color wp-elements-c38a0f673e5a6a90b40282c2d37eb46c is-layout-flow wp-block-quote-is-layout-flow">\n<p>&#8220;I&#8217;ve done another round of cleanup and polish, received the all-clear from the <a href="https://github.com/WordPress/theme-check">theme check plugin</a>, added a proper theme description and <a href="https://pulitzer.andersnoren.se/">created an info page about the theme on my site</a>.&#8221;</p>\n\n\n\n<p class="has-accent-color has-text-color has-link-color wp-elements-e076c461daae77ab5ab339a5b96bf8ef">Anders Norén</p>\n</blockquote>\n\n\n\n<figure class="wp-block-image size-large"><img alt="Screenshot of the Result of automated Theme Scanning." class="wp-image-28529" height="225" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMQ11PaWAAAiEXG.jpeg?resize=652%2C225&#038;ssl=1" width="652" /></figure>\n\n\n\n<p>For more detailed information, you can find in the Theme Handbook page: <a href="https://developer.wordpress.org/themes/releasing-your-theme/submitting-your-theme-to-wordpress-org/">Submitting Your Theme to WordPress.org</a>. </p>\n\n\n\n<p><a href="https://wordpress.org/themes/pulitzer/">Pulitzer is available in the WordPress Theme repository</a></p>\n\n\n\n<figure class="wp-block-image size-large"><img alt="Final full page view of Pulitzer theme." class="wp-image-28531" height="489" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2024/05/GMQ1uZHWoAAs3op-2.png?resize=652%2C489&#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>After the X (formerly known as Twitter) Thread was published, Anders Norén wrote a blog post almost exactly a year ago. <a href="https://andersnoren.se/introducing-pulitzer/"><strong>The post introduced the Pulitzer theme</strong></a>.</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-59c93e449ba3278e9efca737199b4283 is-layout-flow wp-block-quote-is-layout-flow">\n<p>&#8220;I also want to say thank you to everyone who has reached out to say they appreciate the thread. I wasn&#8217;t sure if this would end up at all useful or interesting to anyone, so it means a lot.&#8221;</p>\n<cite>Anders Norén</cite></blockquote>\n\n\n\n<p>Share what your process looks like in the comments, also share your challenges working with block themes, or what you learn on the way.  You can also <a href="https://discord.gg/rmj7pmBh">join us on Discord</a> to discuss with other theme and block developers. </p>\n\n\n\n<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />\n\n\n\n<h2 class="wp-block-heading" id="who-is-anders-noren">Who is Anders Norén?</h2>\n\n\n<div class="wp-block-image">\n<figure class="alignleft size-full"><a href="https://profiles.wordpress.org/anlino/"><img alt="Avatar: Anders Norén, as seen on his WordPress profile" class="wp-image-40352" height="100" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Anders-Noren-avatar.png?resize=100%2C100&#038;ssl=1" width="100" /></a></figure></div>\n\n\n<p><a href="https://andersnoren.se/">Andres Norén</a> is a freelance designer &amp; developer living in the Swedish mountains. You can now follow him<a href="https://bsky.app/profile/andersnoren.bsky.social"> on Bluesky</a>, or read his <a href="https://andersnoren.se/blog/">blog</a>.</p>\n\n\n\n<p>Eleven years ago, Norén published his first Theme in the WordPress repository, <a href="https://wordpress.org/themes/wilson/">Wilson in 2014</a>. There are now 33 Themes by him available.</p>\n\n\n\n<p>He has been an early adopter of block themes with his theme <a href="https://wordpress.org/themes/tove/">Tove</a>, first released in September 2021. In January of this year, he released his twelfth block theme: <a href="https://wordpress.org/themes/spiekermann/">Speakermann</a>. You can take a look at <a href="https://wordpress.org/themes/author/anlino/?tag_slug__and%5B%5D=full-site-editing">all block themes by Norén</a> in the repository.</p>\n\n\n\n<p>You can support Anders Norén and his work by sponsoring him on <a href="https://ko-fi.com/andersnoren">Ko-fi</a>, <a href="https://github.com/sponsors/andersnoren">GitHub</a>, or <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=anders%40andersnoren%2ese&amp;lc=US&amp;item_name=Free%20WordPress%20Themes%20from%20Anders%20Noren%C2%A4cy_code=USD&amp;bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">PayPal</a>. </p>\n\n\n\n<p>Anders Norén was also a guest on the Gutenberg Time Live Q &amp; A. <br /><a href="https://www.youtube.com/watch?v=eiIhJdFfamA"><strong>He discussed the transition from Classic Themes to block-based Themes</strong></a> together with Carolina Nymark and Ellen Bauer. This took place on October 21, 2021. </p>\n\n\n\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\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:"Sat, 10 May 2025 09:46: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:18:"Birgit Pauli-Haack";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:31;a:6:{s:4:"data";s: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:106:"Gutenberg Times: Block Styles, Woo Product Collection, Deepwiki, Accessibility Day — Weekend Edition 329";s:7:"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=40222";s:7:"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://gutenbergtimes.com/block-styles-woo-product-collection-deepwiki-accessibility-day-weekend-edition-329/";s: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:22785:"<p>Hi, </p>\n\n\n\n<p>&#8220;And just like that, winter has faded from our collective memory&#8230;&#8221;, Om Malik wrote in his <a href="https://om.co/2025/05/04/a-letter-from-om-may-2025-edition/">Letter from Om, May edition</a>. In Munich, we just had another cold spell, though. There is no doubt we are heading into the next hot summer.</p>\n\n\n\n<p>So it&#8217;s Saturday afternoon, and I am way behind on your newsletter edition. This week, I published approximately 7,500 words over three posts. Definitely a record! Plus, two podcast episodes (one is still with the editor).</p>\n\n\n\n<p>Don&#8217;t worry, this weekend edition is not entirely about me. <img alt="😜" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f61c.png" style="height: 1em;" /></p>\n\n\n\n<p>Have a splendid weekend ahead! </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<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/block-styles-woo-product-collection-deepwiki-accessibility-day-weekend-edition-329/#0-p">Plugins, Themes, and Tools for #nocode site builders and owners</a></li><li><a class="wp-block-table-of-contents__entry" href="https://gutenbergtimes.com/block-styles-woo-product-collection-deepwiki-accessibility-day-weekend-edition-329/#2-word-press-6-0-1-and-6-1-scheduled">Theme Development for Full Site Editing and Blocks</a></li><li><a class="wp-block-table-of-contents__entry" href="https://gutenbergtimes.com/block-styles-woo-product-collection-deepwiki-accessibility-day-weekend-edition-329/#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<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<p><a href="https://europe.wordcamp.org/2025/workshop-registration-now-open/"><strong>Workshop Registration Now Open for WordCamp Europe 2025 </strong></a>– Secure Your Spot Today! A reminder of the workshops offered: </p>\n\n\n\n<ul class="wp-block-list">\n<li><a href="https://europe.wordcamp.org/2025/session/the-block-developer-cookbook-wceu-2025-edition/">The Block Developer Cookbook: WCEU 2025 Edition</a> with Ryan Welcher</li>\n\n\n\n<li><a href="https://europe.wordcamp.org/2025/session/from-zero-to-demo-mastering-wordpress-playground-blueprints/">From Zero to Demo: Mastering WordPress Playground Blueprints</a> with yours truly</li>\n\n\n\n<li><a href="https://europe.wordcamp.org/2025/session/building-automated-tests-with-wordpress-playground/">Building Automated Tests with WordPress Playground</a> with Berislav (Bero)  Grgicak</li>\n\n\n\n<li><a href="https://europe.wordcamp.org/2025/session/wordpress-gems-for-devs-interactivity-api/">Interactivity API for Developers: WordPress Gems You Should Know</a> with Milana Cap</li>\n</ul>\n\n\n\n<p><a href="https://europe.wordcamp.org/2025/workshop-registration/">Here is the Workshop Registration page</a>. You already need to have a ticket, and use for this registration the same email.</p>\n\n\n\n<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />\n\n\n\n<p><em>Global Accessibility Awareness Day (GAAD)</em> is celebrated on May 15, 2025. <strong>Amber Hinds</strong> from <em>Equalize Digital</em> invites people to join in a virtual accessibility contributor day. This event aims to improve accessibility in WordPress. Whether you’re a developer, designer, content creator, or site owner, you have the skills. You can help make the internet more usable. You can make a difference for millions of people with disabilities. she wrote. You pledge your time <a href="https://equalizedigital.com/gaad2025/"><strong>Global Accessibility Awareness Day Pledge &#8211; May 15, 2025</strong></a>.</p>\n\n\n\n<p>Suggested activities include reporting issues for Core, plugins, or themes. They also cover testing patches on accessibility tickets. You can offer feedback on existing accessibility issues or add captions to videos on WordPressTV. Additionally, running a webinar is another activity choice.</p>\n\n\n\n<figure class="wp-block-image size-full"><a href="https://equalizedigital.com/gaad2025/"><img alt="cover image of the Accessibility Pledge page on Equalize digital" class="wp-image-40382" height="370" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-10-at-14.50.59.png?resize=652%2C370&#038;ssl=1" width="652" /></a></figure>\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>Brian Coords</strong> published the release notes for <a href="https://developer.woocommerce.com/2025/05/06/woocommerce-9-8-4-dot-release/"><strong>WooCommerce 9.8.4</strong></a>.  It addresses a fatal error that occurred as the result of a remote service failure. </p>\n\n\n\n<p><strong>Stephanie Pi</strong> issued a <a href="https://developer.woocommerce.com/2025/05/06/developer-advisory-subscriptions-core-code-moving-into-woocommerce-subscriptions-plugin/"><strong>Developer advisory: Subscriptions core code moving into WooCommerce Subscriptions plugin</strong></a>. he core code that powers WooCommerce Subscriptions will now be managed directly within the main plugin repository, rather than the separate, public <code>Automattic/woocommerce-subscriptions-core</code> codebase. This change, effective May 20, 2025, aims to reduce complexity, streamline versioning, and align with management of other WooCommerce extensions. Only developers directly depending on the core package or monitoring its repository are affected; regular plugin users or API integrators need not take action. </p>\n\n\n\n<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />\n\n\n\n<p><strong>Fabian Kägy</strong> and I hung out with <strong>Nathan Wrigley </strong><a href="https://wpbuilds.com/2025/05/08/421-at-the-core-with-birgit-pauli-haack-and-fabian-kaegy-episode-3/"><strong>for the third episode of the At the Core show</strong></a>. We dove into the latest buzz in WordPress. We especially focused on the 6.8 release. We covered some cool new features like</p>\n\n\n\n<ul class="wp-block-list">\n<li>better details and accordion blocks, </li>\n\n\n\n<li>tweaks to the stylebook, </li>\n\n\n\n<li>fresh pattern section styles, </li>\n\n\n\n<li>upgraded gallery image options, and </li>\n\n\n\n<li>some nice improvements in template editing. </li>\n</ul>\n\n\n\n<p>We discussed the shift toward a slower, more thoughtful approach to WordPress core releases. There are changes in the dev workflow. We also talked about some new plugins like <a href="https://classifaiplugin.com/">ClassifAI</a> and <a href="https://themeswitcher.com/">ThemeSwitcher Pro</a>. These plugins make it easier to integrate AI. They also help to gradually move to block themes. This episode is packed with great tips for anyone looking to stay updated on new developments in WordPress. You also get hands-on insights about the latest features.</p>\n\n\n\n<figure class="wp-block-image size-full"><a href="https://wpbuilds.com/2025/05/08/421-at-the-core-with-birgit-pauli-haack-and-fabian-kaegy-episode-3/"><img alt="cover image for the 421st episode of the WPBuilds podcast" class="wp-image-40275" height="342" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/WP-Builds-Podcast-Episode-421-768x403-1.jpg?resize=652%2C342&#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>Kaspars Dambis</strong> created a nifty optimizing plugin called <a href="https://wpelevator.com/plugins/lazy-load-blocks"><strong>Lazy Load Blocks for WordPress</strong></a>. It does exactly what it says on the tin. Configurable per block, even. Lazy loading blocks improves the Web Vitals. It enhances the Page Speed metrics. It does not impact the layout shift (CLS) when the lazy loading is triggered. There is a great demo video on the page. You will also find screenshots and instructions. Explanations of how this actually works are also included. It&#8217;s comes with a small price tag of $5 per month, billed annually. </p>\n\n\n\n<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />\n\n\n\n<p>In his latest video: <a href="https://www.youtube.com/watch?v=FHqh6oBEzRI"><strong>How Thousands Use WordPress to Get Customer Feedback</strong></a>, Wes Theron demonstrates techniques for content creators and site owners. He shows how to use blocks by <a href="https://crowdsignal.com/">Crowdsignal</a> to gather feedback. You can use highly interactive elements like polls, surveys, voting buttons, and more. Theron provides a step-by-step guide on how to add feedback tools to your site. This helps you start making smarter decisions based on real data.</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-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">\n\n</div></figure>\n</div>\n\n\n\n\n<h2 class="wp-block-heading" id="2-word-press-6-0-1-and-6-1-scheduled">Theme Development for Full Site Editing and Blocks</h2>\n\n\n\n<p>In my latest post, <a href="https://wordpress.com/blog/2025/05/07/custom-block-styles/"><strong>Mastering Custom Block Styles in WordPress: 6 Methods for Theme and Plugin Developers</strong></a>, I’m sharing some cool tips. These tips are for theme and plugin developers. They cover how to create and manage block styles in WordPress. The article discusses using JSON files. It also covers PHP functions like <code>register_block_style()</code>.  </p>\n\n\n\n<figure class="wp-block-image size-full"><a href="https://wordpress.com/blog/2025/05/07/custom-block-styles/"><img alt="list of various methods to create block styles" class="wp-image-40278" height="283" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-07-at-20.17.25.png?resize=652%2C283&#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>In, <a href="https://gutenbergtimes.com/seven-steps-to-a-custom-block-theme-anders-norens-weekend-workflow/"><strong>Seven Tasks to a Custom Block Theme: Anders Norén’s Weekend Workflow</strong></a>, A year ago, over a weekend, Anders Norén shared his block theme building process in a X thread. I finally found the time to make it a more enhanced tutorial for theme builders&#8217; perusal. You learn about Norén&#8217;s tools, his methods, and his tricks to enhance his designs.</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/"><img alt="An artist painting a website in the Sweden. " class="wp-image-40357" height="453" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Swedish-artist-making-a-website.jpg?resize=652%2C453&#038;ssl=1" width="652" /></a></figure>\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. It includes contributions from various teams involved in Gutenberg development. These teams are 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>Eric Karkovack</strong> just published a tutorial on <a href="https://speckyboy.com/display-wordpress-custom-field-data-blocks/"><strong>how to display WordPress custom field data with blocks</strong></a>. He introduces you to the Block Bindings API and walks you through an example from start to finish. </p>\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> shared with me <strong>DeepWiki,</strong> a service by <a href="https://devin.ai/">Devin AI</a>. it introduces itself as &#8220;your collaborative AI teammate, built to help ambitious engineering teams achieve more.&#8221; </p>\n\n\n\n<p>You can make it your companion developing for the Block Editor by visiting the sub-site for <a href="https://deepwiki.com/WordPress/gutenberg" rel="noreferrer noopener" target="_blank">WordPress/Gutenberg</a>. It provides you with access to the documentation and code in a human-readable form. The chatbot will answer your questions. I tested it with two questions:</p>\n\n\n\n<ul class="wp-block-list">\n<li><strong>What are Gutenberg stores and what information can you find there?</strong> You can read <a href="https://deepwiki.com/search/what-are-gutenberg-stores-and_c11c547c-e195-46a6-991b-ded2a3fe4379">the answer here</a>. </li>\n\n\n\n<li><strong>Is there a good analogy for state to better explain state management?</strong> T<a href="https://deepwiki.com/search/is-there-a-good-analogy-for-st_7d01d0ed-c449-44a3-afe6-31cf45929a51">he answer shows</a> quite a few real live analogies: working with a notebook, a collaborative drawing board and a room with light switches and fixtures.</li>\n</ul>\n\n\n\n<p> Try it out yourself! It&#8217;s pretty helpful as it searches the documentation  and digs through the whole Gutenberg code base for answers. </p>\n\n\n\n<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />\n\n\n\n<p>In his <a href="https://developer.woocommerce.com/2025/05/08/tutorial-how-to-build-blocks-with-woocommerce/"><strong>tutorial on how to build blocks with WooCommerce</strong></a>, <a href="https://x.com/sunyatasattva"><strong>Marco Lucio Giannotta</strong></a> and <strong>Karol Manijak</strong> guide developers. They show how to build a WooCommerce Product Collection block. They break it down with an easy-going video and some code examples. You&#8217;ll get the scoop on block theory. You&#8217;ll watch a live-coding session where they create interactive blocks. You&#8217;ll dig deep into the default Product Collection block. There are two hands-on exercises. One teaches how to add a “Featured” filter. Another focuses on registering a custom collection of &#8220;on-sale products under $40.&#8221; It’s a great way to get the hang of block settings, custom queries, and using the WooCommerce API!</p>\n\n\n\n<figure class="wp-block-image size-full"><img alt="Screenshot of the Video cover image Crafting Dynamic Catalogs" class="wp-image-40379" height="365" src="https://i0.wp.com/gutenbergtimes.com/wp-content/uploads/2025/05/Screenshot-2025-05-10-at-13.39.53.png?resize=652%2C365&#038;ssl=1" width="652" /></figure>\n\n\n\n<p>The <strong><a href="https://www.youtube.com/watch?v=vDL8zDRaSiY">second part of the Unit test (with Jest) for WordPress Blocks</a></strong> is out. <strong>JuanMa Garrido</strong> programs unit tests for the copyright block from the &#8220;Tutorial: Build your first block&#8221;. He also explores how to  debug the Save component of a block. </p>\n\n\n\n<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />\n\n\n\n<p>The <strong>Codeable</strong> Team published <a href="https://www.codeable.io/blog/how-to-get-started-with-the-interactivity-api/"><strong>How to Get Started with the Interactivity API</strong></a>. This article introduces WordPress developers to a way of adding real-time features to websites without using heavy scripts or plugins. It explains that the Interactivity API, available from WordPress 6.5, allows developers to update page elements quickly, enhancing site performance and making development easier. It highlights the API’s benefits in performance, scalability, and WordPress integration.</p>\n\n\n\n<p>The next episode of <em>Jon learns to code with AI</em> is up. In <a href="https://www.youtube.com/watch?v=XO4L5Hv3RTw" rel="noreferrer noopener" target="_blank">WordPress as a MCP Server</a>, <strong>Jonathan Bossenger</strong> reviewed the WordPress MCP plugin from Automattic. This plugin turns your WordPress site into an MCP server that your AI Agent can interact with. To learn what that exactly means, you need to watch the video. </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<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: New York &#8211; View from The Highline 2015 by Birgit Pauli-Haack</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, 10 May 2025 00:49:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s: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: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:18:"Matt: Code Matters";s:7:"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=142334";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:35:"https://ma.tt/2025/05/code-matters/";s: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:413:"<p>It looks like the code that the newly announced Figma Sites is producing isn&#8217;t the best.</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>\n\n\n\n<p>There are some cool Figma-to-WordPress workflows; I hope Sites gets more people exploring those options.</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:"Fri, 09 May 2025 22:59:18 +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: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:56:"Gravatar: How to Design an Author Brand Readers Remember";s:7:"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=3165";s:7:"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:53:"https://blog.gravatar.com/2025/05/09/author-branding/";s: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:17951:"<p>With <a href="https://www.tonerbuzz.com/blog/how-many-books-are-published-each-year/">more than 500,000 books published each year</a>, many authors struggle to differentiate themselves in a saturated market. Your words might be brilliant, but without a recognizable brand, they can easily get lost among countless other titles on physical and virtual shelves. </p>\n\n\n\n<p>A solid author branding strategy needs to go beyond traditional approaches. If you want people to recognize and remember your work, you need a multi-platform presence and to maintain brand consistency. The most successful authors don&#8217;t just write great books – they craft authentic identities that resonate with their target audience.</p>\n\n\n\n<p>If you’re struggling to get to this point, you’re not alone. For many creatives, the most challenging part of being an author is the need to promote oneself, which makes the whole branding process a bit intimidating. </p>\n\n\n\n<p>To help you in this, we&#8217;ll give you a practical roadmap for establishing an authentic author brand, helping you to create visual recognition with advanced strategies that will help your work get noticed. Whether you&#8217;re just starting out or looking to refresh your existing presence, these techniques will help you build meaningful connections with readers.</p>\n\n\n\n<h2 class="wp-block-heading"><strong>Crafting an unforgettable author brand: Key strategies for standing out</strong></h2>\n\n\n\n<p>Authors face a unique challenge: Creating a professional presence that attracts readers while remaining authentic to their writing style and voice. This balance between marketability and authenticity forms the foundation of effective author branding.</p>\n\n\n\n<p>The first thing you need to understand is that your genre is the main thing that will shape branding decisions. For example, fiction writers often benefit from creative visual branding or custom-built websites that reflect their story themes. A fantasy author might use mystical imagery and an immersive website design, while a thriller writer, like <a href="https://jamesrollins.com/">James Rollins</a>, might opt for darker tones and suspenseful elements. </p>\n\n\n\n<figure class="wp-block-image size-large"><img alt="1 – James Rollins author website example" class="wp-image-3168" height="369" src="https://blog.gravatar.com/wp-content/uploads/2025/04/1-james-rollins-website-homepage.png?w=660" width="660" /></figure>\n\n\n\n<p>Academic and non-fiction authors (like <a href="https://thecruxbook.com/">Richard P. Rumelt</a> in the example below) typically prefer sleeker, more professional branding with verified credentials, professional profiles, and links to the various places people can buy their books.</p>\n\n\n\n<figure class="wp-block-image size-large"><img alt="2 – Richard P. Rumelt website homepage" class="wp-image-3169" height="414" src="https://blog.gravatar.com/wp-content/uploads/2025/04/2-richard-p-rumelt-website-homepage.png?w=660" width="660" /></figure>\n\n\n\n<p>However, for successful author brands, the website design is just the beginning. You need to create an overarching strategy that intersects your unique writing style, genre positioning, and reader relationships. Each element reinforces the others, creating a cohesive identity readers can connect with.</p>\n\n\n\n<p>To start developing your author brand, follow these practical steps:</p>\n\n\n\n<ol class="wp-block-list">\n<li>Extract core themes from your writing – recurring motifs, values, or perspectives – and incorporate them into your brand identity.</li>\n\n\n\n<li>Study successful authors in your genre, noting how they position themselves visually and verbally.</li>\n\n\n\n<li>Design a sustainable engagement strategy across multiple platforms that fits your writing schedule and energy levels.</li>\n\n\n\n<li>Build recognition through consistent profile management across publishing platforms, social media, and professional networks.</li>\n</ol>\n\n\n\n<p><strong><img alt="⚠" class="wp-smiley" src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/26a0.png" style="height: 1em;" />Branding isn&#8217;t about creating a false persona, and authenticity resonates more than perfection.</strong> Let your unique voice guide your branding decisions, and readers will naturally connect with both you and your work.</p>\n\n\n\n<h3 class="wp-block-heading"><strong>Storytelling and voice: Making your brand uniquely yours</strong></h3>\n\n\n\n<p>The most effective author brands maintain narrative consistency across all touchpoints – books, newsletters, social media posts, and author interviews. However, being consistent doesn&#8217;t equal being repetitive; it means ensuring your unique perspective shines through everything you create.</p>\n\n\n\n<p>Now, we know this can sound a bit like a chore, especially if you’re not used to being active online. Still, it’s a necessary one and kind of like an extension of your storytelling abilities – an opportunity to weave your experiences and expertise into every interaction with readers. Your personal anecdotes, thought processes, and distinct point of view are assets that make your brand impossible to duplicate.</p>\n\n\n\n<p>One of the most common ways for authors to connect with audiences is to share their knowledge through workshops and writing tips, which serve multiple purposes. Not only does teaching help others, but it also positions you as an authority in your genre. A romance novelist hosting dialogue-writing workshops or a mystery author sharing plot-twisting techniques creates value while strengthening their brand identity.</p>\n\n\n\n<p>And these brand-building activities need not feel forced. The same creativity that fuels your writing can make branding feel like a natural extension of your work rather than a separate marketing task. When your authentic voice remains consistent, readers recognize it instantly, whether in your books or your latest social media update.</p>\n\n\n\n<h3 class="wp-block-heading"><strong>Visual elements that captivate readers</strong></h3>\n\n\n\n<p>While written content forms the foundation of an author&#8217;s work, visual elements create immediate recognition and emotional connection. Your visual identity – from author photos to website design – communicates volumes before readers encounter a single word you&#8217;ve written.</p>\n\n\n\n<p>Video content has become particularly powerful for author branding. Maintaining a <a href="https://www.youtube.com/">YouTube</a> channel, like authors <a href="https://www.youtube.com/@christopher_paolini">Christopher Paolini</a> and <a href="https://www.youtube.com/@XiranJayZhao">Xiran Jay Zhao</a> have done, allows readers to connect with your personality beyond the page. </p>\n\n\n\n<p>They’re also great examples of the different approaches authors can take regarding their content. Christopher’s channel is all centered around his books, especially the Eragon universe, with only his latest video being about keyboards (an author’s best friend). </p>\n\n\n\n<figure class="wp-block-image size-large"><img alt="3 – Christopher Paolini YouTube channel homepage" class="wp-image-3170" height="417" src="https://blog.gravatar.com/wp-content/uploads/2025/04/3-christopher-paolini-youtube-channel.png?w=660" width="660" /></figure>\n\n\n\n<p>Xiran, on the other hand, actually built her YouTube audience before she even published her book and got popular by analyzing movies and series that contain Chinese elements and characters (Mulan, Avatar: The Last Airbender, and Turning Red, just to mention a few). </p>\n\n\n\n<figure class="wp-block-image size-large"><img alt="4 – Xiran Jay Zhao YouTube channel homepage" class="wp-image-3171" height="449" src="https://blog.gravatar.com/wp-content/uploads/2025/04/4-xiran-jay-zhao-youtube-channel.png?w=660" width="660" /></figure>\n\n\n\n<p>All of this is to say that your channel can be about anything that your audience (and you!) find interesting. This could include book discussions, writing process insights, or behind-the-scenes glimpses of research trips.</p>\n\n\n\n<p>Beyond YouTube, simple visual consistency across platforms can also dramatically increase recognition. When readers see the same professional headshot, color scheme, and typography across your website, book jackets, and social accounts, they subconsciously register a cohesive brand.</p>\n\n\n\n<p>Several tools help maintain this visual consistency without requiring graphic design expertise. <a href="https://gravatar.com/">Gravatar</a>, for instance, provides profile management that ensures your image appears consistently across hundreds of websites and platforms. This visual continuity builds recognition while simplifying the technical aspects of maintaining your author brand across the internet.</p>\n\n\n\n<h2 class="wp-block-heading"><strong>Building a multi-platform author presence</strong></h2>\n\n\n\n<p>Being on multiple platforms is great. It lets you cast a wider net on potential audiences, and it keeps you in the loop. However, there is one drawback – you don’t actually own any of those profiles. If a platform goes down, so does your profile, and while some of them look eternal, none of them are (remember MySpace?). </p>\n\n\n\n<p>This is why your author website should be the central hub of your online presence – a permanent digital home where readers can find your complete bibliography, background information, upcoming releases, and blog content. Unlike social media platforms that come and go, your website remains under your control, making it an essential foundation for long-term brand building.</p>\n\n\n\n<p>For authors using <a href="https://wordpress.org/">WordPress</a>, the <a href="https://blog.gravatar.com/2024/10/23/upgrade-author-profiles-with-the-gravatar-block-for-wordpress/">Gravatar author block</a> can automatically sign off blog posts with your profile information, providing consistent branding while boosting your site&#8217;s SEO through proper authorship markup. </p>\n\n\n\n<figure class="wp-block-image size-large"><img alt="5 – Personalized Gravatar author block for WordPress" class="wp-image-3172" height="426" src="https://blog.gravatar.com/wp-content/uploads/2025/04/5-gravatar-profile-block-customized.png?w=660" width="660" /></figure>\n\n\n\n<p>This simple implementation helps search engines understand who created the content, potentially improving visibility for your work.</p>\n\n\n\n<p>Still, you shouldn’t write off other platforms completely, despite their potential brevity. A multi-platform approach allows you to meet readers where they already spend time online, expanding your reach beyond those who actively seek you out.</p>\n\n\n\n<p><a href="https://twitter.com/">X</a> (formerly Twitter) has long been a primary platform for authors to share thoughts, engage with readers, and connect with publishing professionals. Now, it is slowly being overtaken by <a href="https://blog.gravatar.com/2025/02/06/bluesky-handle/">Bluesky</a>, and the idea behind it is the same – share immediate thoughts and updates and connect quickly with your readers. </p>\n\n\n\n<figure class="wp-block-image size-large"><img alt="6 – Raymond E. Feist Bluesky profile" class="wp-image-3174" height="509" src="https://blog.gravatar.com/wp-content/uploads/2025/04/6-raymond-e-feist-bluesky-profile.png?w=660" width="660" /></figure>\n\n\n\n<p>There are also alternative platforms, which often provide more targeted opportunities to reach specific audiences. <a href="https://slack.com/">Slack</a> and <a href="https://discord.com/">Discord</a> communities dedicated to literature or particular genres are becoming increasingly more popular because they promote safe spaces for meaningful discussion with engaged readers. </p>\n\n\n\n<p>Technical authors, on the other hand, might find <a href="https://github.com/">GitHub</a> an unexpected but valuable platform for demonstrating expertise and connecting with technically-minded readers. On both platforms, your Gravatar avatar automatically displays, maintaining visual consistency across these diverse spaces.</p>\n\n\n\n<p>Whatever you chosen bundle of platforms is, <a href="https://www.optimizely.com/insights/blog/content-repurposing-guide/">strategic content adaptation</a> will maximizes the impact of your work across platforms. A blog post can transform into a Twitter thread, newsletter excerpts, <a href="https://www.instagram.com/">Instagram</a> quotes, or discussion topics for online communities – each tailored to the platform&#8217;s format while preserving your distinctive voice and message.</p>\n\n\n\n<p>This cross-platform presence builds more than just visibility. It establishes trust through verification and consistency. When readers encounter your recognizable branding across multiple channels, their confidence in your authenticity grows, especially when platforms like Gravatar provide verification mechanisms that confirm you are who you claim to be.</p>\n\n\n\n<h3 class="wp-block-heading"><strong>Streamline your brand management with Gravatar</strong></h3>\n\n\n\n<figure class="wp-block-image size-large"><img alt="7 – Gravatar homepage" class="wp-image-3175" height="343" src="https://blog.gravatar.com/wp-content/uploads/2025/04/7-gravatar-new-homepage.png?w=660" width="660" /></figure>\n\n\n\n<p>Managing multiple online profiles across various platforms can quickly become overwhelming. Gravatar offers a solution specifically valuable for authors seeking efficient brand management without the administrative headache.</p>\n\n\n\n<p>A Gravatar profile serves as a <a href="https://blog.gravatar.com/2024/11/18/create-online-profile/">centralized online identity hub</a> where authors can build an authentic digital presence that fosters trust with readers. The platform includes:</p>\n\n\n\n<ul class="wp-block-list">\n<li>Verification badges and the ability to link to your various online profiles, proving you&#8217;re the genuine author behind the work. </li>\n</ul>\n\n\n\n<figure class="wp-block-image size-large"><img alt="8 – Verified links in a Gravatar profile" class="wp-image-3176" height="478" src="https://blog.gravatar.com/wp-content/uploads/2025/04/8-gravatar-profile-verified-accounts-section.png?w=660" width="660" /></figure>\n\n\n\n<ul class="wp-block-list">\n<li>The ability to showcase your portfolio directly within your Gravatar profile, making it easy for potential readers to discover your publications with a single click.</li>\n</ul>\n\n\n\n<figure class="wp-block-image size-large"><img alt="9 – Portfolio and article links in a Gravatar profile" class="wp-image-3178" height="429" src="https://blog.gravatar.com/wp-content/uploads/2025/04/9-gravatar-links-feature.png?w=660" width="660" /></figure>\n\n\n\n<ul class="wp-block-list">\n<li>Customization options that allow you to tailor your profile to match your author brand&#8217;s visual style. This includes colors, fonts, and imagery that align with your book covers and website design.</li>\n</ul>\n\n\n\n<figure class="wp-block-image size-large"><img alt="10 – Personalized Gravatar profile with a custom background, colour palette, and cover photo" class="wp-image-3179" height="469" src="https://blog.gravatar.com/wp-content/uploads/2025/04/10-profile-design-customization-in-gravatar.png?w=660" width="660" /></figure>\n\n\n\n<ul class="wp-block-list">\n<li>Automatic profile syncing – this means that when you update your author photo once, the changes propagate everywhere your Gravatar appears, including WordPress, GitHub, Slack, and hundreds of other platforms. </li>\n\n\n\n<li>The ability to maintain separate profiles for different genres, pen names, or to separate professional and personal identities – all managed from a single account.</li>\n\n\n\n<li>A <a href="https://docs.gravatar.com/2024/05/23/qr-me-this-qr-me-that/">unique QR code for each profile</a>, allowing you to instantly connect with people in real-life conversations like conventions, university talks, or other events. Just add the code to your phone wallet, and you’re ready to share your profile!</li>\n</ul>\n\n\n\n<figure class="wp-block-image size-large"><img alt="11 – Adding a Gravatar profile QR code to Apple and Google wallet" class="wp-image-3180" height="536" src="https://blog.gravatar.com/wp-content/uploads/2025/04/11-add-qr-code-to-wallet.png?w=660" width="660" /></figure>\n\n\n\n<h2 class="wp-block-heading"><strong>Launch your enhanced author brand today</strong></h2>\n\n\n\n<p>Effective author branding doesn&#8217;t require massive budgets or complex marketing strategies. It&#8217;s about starting small with authentic, consistent efforts that grow over time. Even minor improvements to your online presence can significantly impact how readers perceive and remember your work.</p>\n\n\n\n<p>Begin by examining authors you admire. Study how they present themselves online – not to copy their style, but to understand what makes their brand effective. Notice how the most memorable author brands maintain consistency across all platforms while allowing their authentic personality to shine through.</p>\n\n\n\n<p>You should also pay attention to their profile management – the authors whose careers continue to flourish typically maintain consistent, professional images across platforms. This is where tools like Gravatar naturally tie into author branding. By centralizing your profile management, Gravatar helps you maintain a consistent and trusted professional author presence across numerous platforms without the typical administrative burden. </p>\n\n\n\n<p>Building an authentic author brand takes time, but the first steps are simple. Start today and <a href="https://gravatar.com/">create a free Gravatar profile</a> to begin establishing your consistent online 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>";s: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, 09 May 2025 14:38:33 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s: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:34;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:63:"Do The Woo Community: Bits and Pieces of the Channel with BobWP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"https://dothewoo.io/?p=96788";s:7:"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://dothewoo.io/bits-and-pieces-of-the-channel-with-bobwp/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:175:"In this episode, Bob discusses updates for WordCamp Europe, including minor show name changes, a new host announcement, and the relocation of daily posts to his personal blog.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 08 May 2025 13:46:47 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s: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:35;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:62:"Do The Woo Community: Daily Posts Packing Up and Taking a Trip";s:7:"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=96776";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:66:"https://dothewoo.io/blog/daily-posts-packing-up-and-taking-a-trip/";s: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:54:"Taking a break on these posts for a couple of reasons.";s: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, 08 May 2025 08:34:29 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s: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:36;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:69:"Akismet: Version 5.4 of the Akismet WordPress plugin is available now";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:28:"http://akismet.com/?p=284412";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:37:"https://akismet.com/blog/akismet-5-4/";s: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:872:"<p>Version 5.4 of <a href="http://wordpress.org/plugins/akismet/">the Akismet plugin for WordPress</a> is now available. This update contains the following improvements:</p>\n\n\n<ul class="wp-block-list"><li>We&#8217;ve added a &#8220;Compatible Plugins&#8221; section to the Akismet settings page that shows any other installed and active plugins that are compatible with Akismet, along with links to documentation on how to ensure they&#8217;re working together.</li>\n\n<li>The stats pages now use the user&#8217;s locale instead of the site&#8217;s locale if they&#8217;re different.</li></ul>\n\n\n<p>To upgrade, visit the Updates page of your WordPress dashboard and follow the instructions. If you need to download the plugin zip file directly, links to all versions are available in <a href="http://wordpress.org/plugins/akismet/">the WordPress plugins directory</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, 07 May 2025 16:38:11 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:17:"Christopher Finke";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:37;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:84:"WPTavern: #168 – Hari Shanker on Understanding and Showing WordPress Contributions";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:48:"https://wptavern.com/?post_type=podcast&p=195550";s:7:"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:98:"https://wptavern.com/podcast/168-hari-shanker-on-understanding-and-showing-wordpress-contributions";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:50463:"<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 understanding the nature of WordPress contributions and making sure that contributors understand where they might be needed.</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 host 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 Hari Shanker. Hari has been a member of the WordPress community since 2007, and has contributed in various capacities, including as a full-time contributor for several years, working with Automattic, working with initiatives like Five for the Future, and supporting numerous community events around the world. He currently volunteers his time as a community program manager, helping to grow and support the WordPress ecosystem from his home in India.</p>\n\n\n\n<p>If you&#8217;re involved in the WordPress project, you likely know how vast and complex the contributor ecosystem can be, but you might not have heard of the WordPress Contribution Health Dashboards. An experimental initiative aimed at making sense of all the communities moving parts by gathering, visualizing, and sharing contribution data.</p>\n\n\n\n<p>But why does WordPress need something like this? Well, it could help new and existing contributors figure out where to pitch in, and how their work might guide the project&#8217;s future growth. Hari&#8217;s here to explain.</p>\n\n\n\n<p>We start the podcast by going off on a tangent, discussing the landscape of WordPress in India. India is experiencing a huge upswell in community activity, innovation and youth engagement, and it&#8217;s exciting to hear about.</p>\n\n\n\n<p>We then dive into the main thrust of the podcast, the Contribution Health Dashboards. How the idea came about. Who helped drive it forwards. Why it&#8217;s proving so challenging to build, and the massive value it promises for contributors, team reps, project leadership, and anyone curious about where WordPress needs help.</p>\n\n\n\n<p>We look at the practical aspects too. What tools are, and aren&#8217;t, available? The difficulty of tracking data across the many platforms WordPress uses, and what kinds of skills, and volunteers are needed to push this work forward.</p>\n\n\n\n<p>Hari shares his vision for accessible visual dashboards that can guide contributors of all skill sets, and help make the best of every single contribution hour.</p>\n\n\n\n<p>If you&#8217;ve ever wondered how to make your WordPress contributions matter even more, or how the project could be better supported by data driven insights, 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 Hari Shanker.</p>\n\n\n\n<p>I am joined on the podcast by Hari Shanker. Thank you for joining me.</p>\n\n\n\n<p>[00:03:53] Hari Shanker: Thank you for inviting me to the podcast and I&#8217;m so excited to be here, Nathan.</p>\n\n\n\n<p>[00:03:58] Nathan Wrigley: I am really pleased that you&#8217;ve joined me. We had aspirations of doing this podcast from Manila, but things conspired against us, and so we are doing this via an online call, let&#8217;s say a Zoom call or something like that. So I&#8217;m really pleased that we could finally hook up.</p>\n\n\n\n<p>The intention is to talk today about something that I suspect many people in the WordPress community will not know a great deal about. So it is called the WordPress Contribution Health Dashboard, or dashboards I should say. And we&#8217;ll get into that in a moment. What it is. Why it exists, and how that project is moving along.</p>\n\n\n\n<p>But before then, Hari, would you mind just giving us your little bio, your introduction to who you are, where you live, what you do in the WordPress space. As much as you like, really over to you.</p>\n\n\n\n<p>[00:04:44] Hari Shanker: Thank you so much, Nathan. So my name Hari Shanker. I live in the south of India, in a city called Kochi. I&#8217;ve been with the WordPress community since 2007. I&#8217;ve been contributing actively since 2016. I have been contributing full-time. I had been contributing full-time from 2020 to 2024.</p>\n\n\n\n<p>At this point, I&#8217;m a volunteer contributor. I used to work with Automattic for a while, from 2016 to 2025. At this point I&#8217;m not employed, I am a volunteer contributor, very much excited to work on WordPress. And I&#8217;ve done a bunch of things with WordPress. WordPress is one of my biggest passions.</p>\n\n\n\n<p>My work has mostly been in the community team. I am still a community program manager, which means I approve events, I support events, and my work has mostly been in the contributor experience of WordPress. I led the Five for the Future initiative for quite a long time. And I was also working on the WordPress Contributor Working Group, where we held three editions of the WordPress Contributor Mentorship Program.</p>\n\n\n\n<p>As I said, I live in Kochi. I have a wife and I have three cats. I absolutely love it here. They call Kerala Gods own country, and I love the state, I love where I live. And I love the fact that I can work on the best open source software in the world, sitting in my lovely little city, in my lovely little apartment. That&#8217;s all about me.</p>\n\n\n\n<p>[00:05:58] Nathan Wrigley: That&#8217;s so nice. That&#8217;s really lovely. Can I just segue a little bit and steer away from the conversation that we&#8217;re intending to have? And ask you about WordPress in India?</p>\n\n\n\n<p>Now, obviously you may not have your finger on the pulse of everything that&#8217;s going on, but I&#8217;m curious. Not having been to India during the period I&#8217;ve been using WordPress, I have an intuition that it&#8217;s a thriving community over there, dare I even say, a growing community.</p>\n\n\n\n<p>But that&#8217;s just based upon the little bits and pieces that I&#8217;ve captured from friends, and articles that I&#8217;ve seen. And there seems to be this big upswell in plugin development, and agencies that are really doing great work. So there isn&#8217;t really a question there, it&#8217;s just more, tell us about how WordPress is going in India.</p>\n\n\n\n<p>[00:06:40] Hari Shanker: Absolutely. So you got it right. WordPress, the WordPress economy, the WordPress ecosystem is really thriving. As you said, it&#8217;s everywhere. Like, the plugin ecosystem, we have VIP agencies. We have so much innovation happening in WordPress. We have companies like InstaWP. We have agencies like rtCamp, Multidots. There&#8217;s so much innovation happening. That&#8217;s just the tip of the iceberg.</p>\n\n\n\n<p>There is also so much community activities happening. We&#8217;ve had so many of these events, so many innovative WordPress events, we&#8217;ve had WordCamps.</p>\n\n\n\n<p>So I was involved in setting up an event called WordPress Photo Festival, and we&#8217;ve had a WP Campus Connect. We&#8217;ve had a host of women&#8217;s day events that were held on March 8th. Again, that&#8217;s the tip of the iceberg. There&#8217;s so many activities happening. So be it innovation in plugin development or theme development.</p>\n\n\n\n<p>And again, themes are big in India. We have had, Astra theme comes from India. So many of these activities happening. And it&#8217;s not just centered in one city, it is really all over the place. So in Kerala where I live in, we have very thriving community. We have folks who&#8217;ve come up from the community, and who&#8217;ve built things that have made waves all over the world. And again, across different cities, be it Mumbai, Pune, Ahmadabad, Kolkata, Ajmer.</p>\n\n\n\n<p>So India is, as you know, is a big country. So we have a host of these local WordPress meetup groups and several thousands of community members. And I do not use the word thousand as a euphemism. It really is, like we actually have thousands of community members who are doing cutting edge work. And I can tell you, it is so inspiring to see. I mean, as an open source fan, like it really gives me the energy to keep going.</p>\n\n\n\n<p>So yeah, you are right. WordPress is thriving. And we have WordCamp Asia coming to India, in Mumbai in 2026. I am very excited about that.</p>\n\n\n\n<p>I was actually the mentor of WordCamp Asia for a short while, but this point I&#8217;ve stepped down. I have applied as an organiser and I hope to be in the organising team as well. So I think it&#8217;s the best time for WordPress in India, and we still have heights to conquer. The best is yet to come. Super excited about all that.</p>\n\n\n\n<p>[00:08:36] Nathan Wrigley: Yeah, that&#8217;s really great because it does seem in different parts of the world, and maybe this will feed into the conversation that we&#8217;re about to have, it does feel in other parts of the world. So I&#8217;m in the UK, and it does feel that the community side of things has definitely taken a bit of a hit since the pandemic, so 2019 and beyond.</p>\n\n\n\n<p>Those meetups that happened in some cases have come back, but in the majority of cases, they still are either dormant or perhaps have been abandoned. And I feel that the same might be true across Europe and North America. I can&#8217;t speak to whether that is accurate or not, but that&#8217;s the feeling that I get.</p>\n\n\n\n<p>It does feel, like I said, the news that I see, the articles that I read in WordPress journalism, it really does feel like India is exactly as you&#8217;ve described it. But also it feels like it&#8217;s not just confined to WordPress, it&#8217;s tech in general. It feels like there&#8217;s, well, maybe renaissance is the wrong word, but there&#8217;s just a huge pivot in all things tech over to places like India. You know, whether that&#8217;s, I don&#8217;t know, SaaS apps and so on, but CMSs as well. It does feel like India is definitely on the rise in all manner of tech.</p>\n\n\n\n<p>[00:09:41] Hari Shanker: Absolutely. I think there&#8217;s a bunch of reasons for it, but in my mind, I think a big reason for that, I wouldn&#8217;t call it the biggest reason, is our very young population. India&#8217;s population at this point is over 1.4 billion. I&#8217;m not aware of the latest number, but I think it&#8217;s around 1.5 billion. So off the top of my head, I think at least 50% of it is a young population. They are less than 35 years of age.</p>\n\n\n\n<p>All these young folks, they&#8217;re coming in with so much energy. There&#8217;s an abundance of human capital. And we are in the internet age, and one good thing that happened after COVID-19 is a lot of these folks got connected. And India has really cheap internet. I mean, of all the places that I&#8217;ve traveled to, internet in India has been the cheapest that I know. So it&#8217;s really easy to get connected.</p>\n\n\n\n<p>And a lot of these people who are connected, they&#8217;re using it very productively. That is one of the reasons why you&#8217;re seeing this spurt of activity. And there&#8217;s been a lot of these inspiring stories, which is really inspiring the youth. And WordPress being what it is, is seeing a lot of this innovation coming in.</p>\n\n\n\n<p>But I think, again, we&#8217;re really at the tip of the iceberg. The best is yet to come, because I see a lot more people coming into the community. And my hope is with WordCamp Asia happening next year, we will see a lot more of these young folks embracing WordPress, not just tech, but embracing WordPress, and doing a bunch of innovations. So I think the goal for the Indian community is to get all these young people to WordPress.</p>\n\n\n\n<p>[00:10:53] Nathan Wrigley: It&#8217;s interesting that you mentioned the young people. I was just wondering if there was a connection between, for example, education, you know, school and the emergence of jobs. I don&#8217;t know what age you leave school in India, but in the UK it would be typically 16 or 18. And at that point you&#8217;re perhaps going on to higher education, so university, something like that, or finding a job.</p>\n\n\n\n<p>And I think there&#8217;s been a real effort in the UK to supply education in tech. But it doesn&#8217;t really seem to pivot around open source software. It tends to pivot around, can I use this already existing product? Often a kind of Microsoft version of something, in order to create wealth or a job. But I don&#8217;t know if there&#8217;s more of a pivot in India to use open source things to teach those kind of things.</p>\n\n\n\n<p>So again, there&#8217;s no question there. It&#8217;s just more of an observation really.</p>\n\n\n\n<p>[00:11:41] Hari Shanker: Yeah, so I think your observation is pretty astute. But I think India has a bit of a USP here when it comes to open source. We have had an open source movement since time immemorial. I mean, specifically my state of Kerala, we have a very uniquely liberal government. So they sort of stepped away from proprietary software and embraced open source software as early as in the nineties.</p>\n\n\n\n<p>So Richard Stallman, when he used to be active in the community, he used to visit Kerala almost every other year. And we, as a result of that, have a pretty thriving open source community in my state.</p>\n\n\n\n<p>All sorts of open source from Linux distributions, to Python and WordPress of course, and Drupal, and we have all these communities very active and thriving.</p>\n\n\n\n<p>And a lot of the young people, they get their introduction to tech through these open source communities, which have local chapters. It&#8217;s not just related to my state, even though my state has a pretty high population of this, a lot more people doing this. I would say that the open source movement is pretty active all across India. So we have these big open source conferences in some of the big universities. We have these small local chapters where people get active. So at some point or the other young people who are interested in tech, they get some introduction to open source. And a lot of people are enamoured by the philosophy.</p>\n\n\n\n<p>Now, coming specifically to the WordPress community, we have recently had some really good events. So these are in a youth camp format. I was involved in one of them. And there was an event called WP Campus Connect that was held in Ajmer, Rajasthan, which is held by Pooja Derashri. So these events, they were experiments really, but they&#8217;ve been quite successful, especially I would say the WP Camps Connect event. It&#8217;s been fantastic.</p>\n\n\n\n<p>Like, it was an event series, and as a result of those events, I don&#8217;t know the numbers, but off the top of my head, at least 200 to 300 people, 300 kids, they got introduced to WordPress directly. I&#8217;m not just talking about, you know, setting up websites, they got an introduction to the community. And those efforts are really paying off. We are seeing these people coming into the community and being active.</p>\n\n\n\n<p>So the gist of what I&#8217;m saying is, yes, you are right. We are seeing an open source movement and we, a lot of these young kids, I mean of course a lot of them, as you said, they move to proprietary technology, but they have more of a window into open source as they blossom.</p>\n\n\n\n<p>[00:13:40] Nathan Wrigley: The interesting thing I suppose about that is, given the long march of history and having many decades into the future, that groundswell amongst the younger people now is going to paint a really interesting picture in a couple of decades time. So in the 2030s and the 2040s, it&#8217;ll be interesting to see how that movement, the young people obviously going into the marketplace, and getting a job in some industry or other, it&#8217;d be interesting to see how that all plays out.</p>\n\n\n\n<p>Because one of the things that I always notice when I go to WordCamps is that age thing. The demographic of age, it always seems to skew older rather than younger, you know? If you were to say, how many people here are over, I don&#8217;t know, let&#8217;s say 45 or 50? I think there&#8217;d be quite a few hands. And if you would say, who&#8217;s under 20? Very few. Certainly in my part of the world. So it will be interesting how that shakes out.</p>\n\n\n\n<p>But how positive is that? That&#8217;s such a great way to begin this podcast. I don&#8217;t know if you want to, if you&#8217;ve got anything more you want to leverage into there quickly before we move on, feel free to.</p>\n\n\n\n<p>[00:14:40] Hari Shanker: I just want to add a quick comment. That is a huge opportunity, and to be honest with you, even in India, even with the huge population, the WordPress events that we have, we still haven&#8217;t seen that influx yet. But the good news is that it&#8217;s changing. It definitely has an effect because when I started organising events for the community in 2016, we got a lot of the young kids and I am seeing them.</p>\n\n\n\n<p>So it&#8217;s been eight years. I&#8217;m seeing the same people, they&#8217;re making waves. I know three or four specific examples of folks who got into the community as college students and then really went places. So if we are able to, when I say we, I&#8217;m referring to the WordPress community, or specifically the Indian WordPress community. If we are able to leverage it well, and if we manage to keep the momentum and grow it, I would say the sky is the limit. So I am super optimistic and extremely excited about where the future lies for WordPress in India.</p>\n\n\n\n<p>[00:15:25] Nathan Wrigley: So that was supposed to be like a one minute aside, and there we go. We&#8217;ve had a really interesting conversation about what WordPress is doing in your part of the world. Thank you for that. That was really interesting.</p>\n\n\n\n<p>Let&#8217;s pivot now to the article. And I&#8217;m going to, in the show notes, I&#8217;m going to link everybody to an article which Hari wrote towards the latter part of last year, so 2024, September. And it was called WordPress Contribution Health Dashboards: An Experiment.</p>\n\n\n\n<p>Now, obviously if you are in the WordPress ecosystem and you&#8217;ve been here for many years, you will have no doubt figured out how complicated and tangled WordPress is. Not just the community, but the software, the code, the events, the different teams which make up WordPress, the multitude of ways that you could become involved.</p>\n\n\n\n<p>And I think it would be fair to say that if you were new to WordPress, that could be pretty overwhelming. It would be fairly easy to sort of step into the community and think, what? Where do I belong? Where do I fit? Where is my experience best used? Where would I find the most, fun or engagement, or meaning in the WordPress space?</p>\n\n\n\n<p>And so it feels like these contribution health dashboards might be some version of trying to get an understanding of what WordPress is, where the gaps are, where the holes are being filled, where the holes in the future might emerge and so on. But just unpack it for us. Who&#8217;s involved? What is the idea of a contribution health dashboard?</p>\n\n\n\n<p>[00:16:54] Hari Shanker: Great question. And thank you for the excellent introduction, Nathan. I think you did a great job of explaining everything.</p>\n\n\n\n<p>To summarise, the idea behind the contribution dashboard is to have sort of like a cockpit or bird&#8217;s eye view of WordPress contributions. WordPress, as you know, has around 20, 22 contribution teams, and these teams are doing a bunch of different activities. As you said in your introduction, it&#8217;s very hard for everybody to follow this.</p>\n\n\n\n<p>So the hope of this project is to build a dashboard, or dashboards, which provide anyone, not just contributors, really anyone in the community to get an idea of where things are with WordPress. So it involves updates on the release, latest releases. It involves activities from various teams, like Core, community, training, photos, meta, et cetera.</p>\n\n\n\n<p>So to give anybody who is coming from any part, with any experience, to give them an idea about where things are. Because at this point it&#8217;s very hard to follow. We have these blogs, we have Slack, we have Trac, we have GitHub. When those contributions to spread out across multiple places, it&#8217;s very hard, even for experience folks to follow. So the hope behind this project was to simplify this with the help of data, and specifically data visualisation. So that is the project specifically.</p>\n\n\n\n<p>Now, as regards to who is involved, I will need to share some history and I promise I&#8217;ll be brief. So this started as a collaborative effort with a bunch of folks, I should say Courtney Robertson&#8217;s name. Courtney has been a real force for good for this project. Like, she&#8217;s been very active. So Courtney Robertson, Naoko Takano, myself, Isotta Peira, and a bunch of contributors all over the world.</p>\n\n\n\n<p>We all came up with this idea. This idea has been floated around for a long, long time. We need dashboards. It could be helpful. But we were not able to make a ton of progress.</p>\n\n\n\n<p>So around WordCamp Europe 2023, there was a question asked in the keynote to Matt Mullenweg and he advocated for it. He said it would perhaps be good to have dashboards, which will bring all this information together.</p>\n\n\n\n<p>So that was when all these efforts really gathered momentum. So Courtney was one of the first people to be really excited about this, she really led this forward. And since I was working on contribution health, I was part of the Contributor Working Group, I was also very excited about this. So Courtney and I, we joined hands and we kicked off efforts.</p>\n\n\n\n<p>So we first looked at having a tool that will help set things up. But that is when we realized that it could get really complicated, and a lot of the existing tools out there, it may not really fit the bill. But we also needed to find out what we need to measure. What should be there in these dashboards? That was a big question that we had.</p>\n\n\n\n<p>So we published a couple of blog posts in the Sustainability Team and the Meta Team. We got a bunch of ideas from the community. We did a lot of on the ground research. Progress was very slow, but we eventually found a tool called Bitergia. Bitergia is a paid tool, it costs a lot of money. Automattic were kind enough to sponsor the tool for the time being.</p>\n\n\n\n<p>So we got a paid subscription with some of us having access to it. And we looked at the data, we crunched numbers. But the limitation of Bitergia was that it only looked at GitHub, like the WordPress GitHub. So if you look at the dashboard, the data for that needs to come from various sources, right? The Make WordPress Slack, there&#8217;s the P2 blogs, there&#8217;s Trac. So this tool was only limited to GitHub.</p>\n\n\n\n<p>So after a lot of discussion with the community, and we held several project health hangouts all the way, Courtney Robertson, myself,  Naoko Takano, Isotta Peira, , all of us, we decided to do, with support from Josepha Hayden, who was then Executive Director of the project, and Chloe Brigmann, we decided to do an experiment.</p>\n\n\n\n<p>We picked three teams, which was the Core Team, Community Team, and the Training Team. And we identified some KPIs, or progress some metrics, which we found out by discussing with the team members. We used the tools that we have, which includes Bitergia and some data that was already available. For instance, for the 6.6 release, we had the spreadsheet which developers always release once a release comes out, like you have the list of contributors. So we crunched numbers, we did some visualisations, and we published the blog post that Nathan, you&#8217;ve linked in the show notes.</p>\n\n\n\n<p>So that is what we&#8217;ve done in short. It&#8217;s an experiment. We&#8217;ve shared some data that we have on what we&#8217;ve collected. We&#8217;ve identified some KPIs.</p>\n\n\n\n<p>So the challenge that we have is, building a full fledged dashboard is time intensive, resource intensive. The Bitergia dashboard that we have, it&#8217;s very limited. It does not give out out the whole information. That post really is a snapshot. And we have data from January through September, 2024.</p>\n\n\n\n<p>So the post, the content that we have, those are really snapshots of the project of contributions for the Core Team, Training Team and the Community Team, as well as stats for WordPress 6.6.</p>\n\n\n\n<p>We went out, we put it out there, we hope to get feedback. So that&#8217;s what we&#8217;ve done. We&#8217;ve not moved ahead from there. But that&#8217;s a whole executive summary of the project and a history of what we&#8217;ve done.</p>\n\n\n\n<p>We did get a lot of positive feedback from folks who were fascinated to find some of the information, which is not previously available. The good thing that we&#8217;ve done is we were also able to set some KPIs. But the work has not progressed since, we are still there. And it&#8217;s a resource intensive project, it needs more contributors and more work to be done in order to move forward. But that&#8217;s a brief summary of everything that we&#8217;ve done.</p>\n\n\n\n<p>[00:21:48] Nathan Wrigley: Perfect. We&#8217;ll get into that bit in a moment, the resource intensiveness of it. But just an observation from my point of view is that, typically, I think if you were to do this experiment in a corporate environment, the data would go to the board of directors, if you know what I mean. So that they could inspect that and figure out how to, I don&#8217;t know, cut out waste, or figure out who needed to be employed, where people needed to be pushed around in the organisation in order to maximise things.</p>\n\n\n\n<p>But whole point in a corporate environment would be the data would end up going north. It would end up towards the senior management way of looking at things. But this is not that. This is a democratised way. In effect, it&#8217;s kind of the opposite. The data is intended to be open for absolutely everybody, so all people can see all of the things.</p>\n\n\n\n<p>And if somebody new were to drop into the project, yes, they might not understand what all of the data means, but at least they might get an understanding of, okay, that team over there looks as if it&#8217;s really fallen on hard times. That team over there, they seem to be doing great. Okay, maybe some of my time needs to be given over here. But the point being, the data is not so that senior management can do things if you like. It&#8217;s so that everybody would be able to see the same view. I hope that&#8217;s what it is anyway.</p>\n\n\n\n<p>[00:23:04] Hari Shanker: That is exactly what it is, but we also hope to influence the senior management there as well. And when I say senior management, it&#8217;s not just for this project leadership, it&#8217;s also the contributors, the folks that keep the lights on. So that would mean Core committers, team representatives, anyone really.</p>\n\n\n\n<p>And again, like you said, the beauty of WordPress, it belongs to everybody. So that&#8217;s the way it&#8217;s supposed to be, right? So we want to make sure that anyone can benefit something from it. So if it&#8217;s a new contributor, they can find out which projects need help. They should be able to identify the areas that they can contribute directly to.</p>\n\n\n\n<p>For leadership, they should be able to see the leading indicators or like the areas where the project is doing really well. And the lagging indicators, where a project needs help so they can make better decisions. And they should be able to change the project goals alongside, by understanding the data. So essentially it is aimed at everybody, not just the top down folks. And that is the hope that we came to this with.</p>\n\n\n\n<p>[00:23:55] Nathan Wrigley: Yeah, perfect. Now, anybody that&#8217;s been in the WordPress space or contributed in any way you will have come across all the tools. You know, there are so many. There&#8217;s Trac, there&#8217;s P2, I suppose, if you&#8217;re working in that environment. There&#8217;s Slack. There&#8217;s probably a bunch of others as well. I&#8217;m sure you could list a whole bunch more.</p>\n\n\n\n<p>And if you&#8217;ve ever wrangled with APIs or, I don&#8217;t know, web hooks or whatever it may be, trying to wrangle data, it&#8217;s a hard task. And it does require a lot of human intervention at the beginning.</p>\n\n\n\n<p>I&#8217;m wondering, is the intention of the project to get it to the point where the human intervention can kind of step away? Because the hard work has been done. We&#8217;ve now understood how to capture the data. How to regurgitate the data. How to display the data. So that at some point it will be less about figuring out how to make the data meaningful and more about, okay, now everybody look at the data and draw conclusions from the data.</p>\n\n\n\n<p>But it sounded from your description as if we&#8217;re still in the, how do we even get the data in? How do we recycle the data? How do we pull it in, regurgitate it and display it ?Again, is that about right?</p>\n\n\n\n<p>[00:25:03] Hari Shanker: You are 100% right. That&#8217;s exactly where we are in at this point. I think I shared some of the background earlier. The challenge is, we are working on data, it&#8217;s a lot of work. I know this because I did a lot of the work in creating the pages that we have.</p>\n\n\n\n<p>Unfortunately, we do not have a tool that gets all the data from all the sources. Any tool that we have, it will need to be customised extensively, and that needs developer help. We do not have a ton of data engineers in the WordPress community. We do have some folks, but they are not in the position to contribute their volunteer time towards this.</p>\n\n\n\n<p>So this needs investment in terms of developer hours, in terms of more tools, in terms of integrations. So in short, this is a huge endeavor. This needs investment from several organisations working in WordPress for this to really succeed, at least to the vision of what we have. That is the realisation that we had.</p>\n\n\n\n<p>But yes, the goal, if the project were to succeed, we should ideally need automated tools that automatically show data. Because if you were to publish this data manually, it&#8217;s a lot of work. I am not sure is the best returning because like, I worked with volunteers when I was working on the Contributor Mentorship Program, and I respect volunteer time.</p>\n\n\n\n<p>They have daily jobs, even sponsored contributors. They have a ton of things to do. Everybody&#8217;s overloaded. That time is very precious, and using the time and creating these dashboards, trust me, it&#8217;s extremely resource intensive. Like, between Courtney and myself and, Isotta and Naoko, we took a lot of time to prepare the dashboards that were out today. So we did that as an experiment to inspire folks so that we can get things done.</p>\n\n\n\n<p>But if you ask me, is it worth it to keep updating it? I&#8217;m not sure. Because I&#8217;m not sure if it&#8217;s worth the number of hours. Maybe we can do it. Maybe if there&#8217;s more folks to help out, it can be continued. But my hope would be to create an automated tool. I&#8217;m convinced that it is going to benefit folks.</p>\n\n\n\n<p>[00:26:49] Nathan Wrigley: Yeah, I mean, I guess that if you do everything manually and you draw the conclusions manually, you&#8217;ve got those one set of conclusions. And really what would be ideal is a portal, for want of a better word, where people can go and see and mine the data for themselves, and display it in interesting ways, and can consume it, and then decide how they&#8217;re going to display that and drill down in different ways. And obviously that requires automation.</p>\n\n\n\n<p>So, okay, we&#8217;re recording this kind of the gap between May and April in 2025. If you could, and I should probably say, you know, the listenership to this podcast is fairly wide. If you could ask for people to come and assist with this project, what kind of people at this moment in time are you looking for. You mentioned that you know, there&#8217;s not many people who are really interested, maybe in data manipulation and what have you, in the WordPress project. Just give us an idea of who you would wish to speak to you after they&#8217;ve listened to this podcast.</p>\n\n\n\n<p>[00:27:45] Hari Shanker: Anyone really. I&#8217;ll share why. The beauty of WordPress, and I think I&#8217;ve explored different open source projects and I think the beauty of WordPress is there&#8217;s something for anyone. So a big part of what we need to do is research. And in the sense of, what do people need to measure?</p>\n\n\n\n<p>So any feedback that folks can give on what they would like to see in a dashboard, that would be helpful. So if you are a listener to this podcast and you have ideas on what you would like to find out, that feedback itself is a big contribution. That will go a long way. That is a big part of the information that will help us.</p>\n\n\n\n<p>On the next level, I would like to have developers who are familiar with Python and data visualisation and things like that. We have explored different ways to do this. I&#8217;ve spoken with several Core committers and folks like Jb Audras who, I mean, Jb Audras does a ton of this amazing work. He publishes release information.</p>\n\n\n\n<p>So I was inspired by that. And the 6.6 dashboard that I published was very much built on his work. He does a lot of that work. So he&#8217;s just published something on WordPress 6.8 in his blog, and he regularly publishes the, a month in Core, year in Core posts in the Make Core blog, which has some of this information.</p>\n\n\n\n<p>So folks like that who have time to spare, who are really good with visualisations, that could be really helpful. And what Courtney and I, and Isotta and Naoko, what we had identified, what our group had identified was that we need a tool, we need an external tool. It&#8217;s very hard to build something from scratch.</p>\n\n\n\n<p>What would really help is to manipulate a tool. And there&#8217;s a bunch of open source tools. There&#8217;s GrimoireLab, which is, it&#8217;s an industry standard tool. It&#8217;s an open source software. It powers several open source projects. And there&#8217;s a company called Bitergia, which builds on  GrimoireLab, to, provide like a sponsored alternative, which is the one that we are using.</p>\n\n\n\n<p>We reached out to them to see if they can build something for us. They quoted a very high price. Currently Automattic is paying €1,000 per month. They quoted upwards of 30 to €40,000 to build this integration. That&#8217;s a huge amount of money and I don&#8217;t think we have the bandwidth to do it.</p>\n\n\n\n<p>So what we need is to bring, again, for folks listening, if you&#8217;re a developer, if you&#8217;re interested in data visualisation, I&#8217;d like to bring you all together to discuss what would be the best way forward.</p>\n\n\n\n<p>So first, once we have the KPIs clearly identified, let&#8217;s see how we can collect all this data and how we can display it. Maybe we can build something. We are in the era of vibe coding. So I think it&#8217;s a lot easier than when we started this project in 2023. It&#8217;s not impossible. Perhaps we can build something, build some very simple dashboard, identify some core KPIs. Maybe have two or three dashboards per team, which can be really filtered. Maybe that is possible. Maybe we don&#8217;t need a tool.</p>\n\n\n\n<p>So we need those developers, and folks with experience in data visualisation. Even like Core developers, like folks who have significant experience tinkering with Meta and Core and all that. So all these folks, if we are able to bring them together, I think we can do that. So I invite all of them to work on this.</p>\n\n\n\n<p>[00:30:29] Nathan Wrigley: Yeah. So if any of that is making sense to you, can I just ask you to go to WP Tavern. Search for the episode with Hari, H-A-R-I. That&#8217;s probably all you need to know. Search there in the Tavern search and hopefully this episode will pop up. And from there you&#8217;ll be able to link in the show notes to the piece that is described where you can find all of the links to the people contributing, but also Hari. Are you open to people contacting you directly and beginning conversations with you one-to-one?</p>\n\n\n\n<p>[00:30:57] Hari Shanker: Absolutely, absolutely. So at this time, as I shared on the beginning of the podcast, my time is slightly limited, but I&#8217;m more than happy to bring people together. That is my strength. And Courtney Robertson, she&#8217;s also very interested in this project. So like, between both of us, I think we can wrangle something and we can keep this moving.</p>\n\n\n\n<p>Because I firmly believe that WordPress needs this. And if folks are able to volunteer their time, I&#8217;m more than happy to bring people together and to keep this project moving. So please, feel free to ping me directly. I&#8217;m Hari Shanker in the Make WordPress Slack. That&#8217;s H-A-R-I-S-H-A-N-K-E-R. As you said, Nathan, folks can comment in the Tavern blog post as well. So any way you can find me, I will find you.</p>\n\n\n\n<p>[00:31:32] Nathan Wrigley: It feels to me like, you know when you go into a great big store or a shop, and I&#8217;m going to use supermarket as an example, where you&#8217;ve never been to that one before. You&#8217;re looking for a particular item. And you can literally spend so many minutes, hours even just searching around. You know, where&#8217;s the aisle? Okay, I found what I think is the right aisle. Now, in the aisle, which shelf am I looking for? And then, where is it?</p>\n\n\n\n<p>This feels like that. It feels like signposting to, here&#8217;s the thing you want. You&#8217;re standing at the door and I&#8217;ll just grab you by the hand and I&#8217;ll take you to the thing that you need to purchase right away. It feels like these dashboards are going to be something akin to that. Just a way of alerting people to the project as a whole, think the supermarket in this case, and how to just make that journey a little bit easier. Make it obvious to everybody what needs help? What doesn&#8217;t need help? What&#8217;s working? What isn&#8217;t working?</p>\n\n\n\n<p>How is it going to be manifested? This will be my last question really. What will this look like? Are we going to be looking at spreadsheets full of numbers? Are we going to be looking at charts? What is the intention? Because when I hear dashboard, I&#8217;m kind of immediately drawn to like line graphs and things like that. That&#8217;s what I&#8217;m imagining I&#8217;m going to end up seeing. But what would be the intention? Because some of this data would probably fit in that, but maybe some of it is just not going to be that. It&#8217;ll just be paragraphs of text, I don&#8217;t know.</p>\n\n\n\n<p>[00:32:47] Hari Shanker: I will share my vision for the dashboard, and it might be very different from what we end up building.</p>\n\n\n\n<p>I would like to build visualisations in the best possible way. So it involves charts, it involves charts of various kinds, pie charts, line charts. So the best form of information depicted in a very visual way, which gives folks a clear understanding of where the project is headed.</p>\n\n\n\n<p>In the current version, we&#8217;ve included some text because we wanted to sort of like share our findings. But I think as you shared earlier in this podcast, we want folks to find out the data for themselves. And Bitergia currently allows folks to download the data directly as a spreadsheet or in a CSV format. We&#8217;d like to give folks that option too. So if you&#8217;re not comfortable seeing, or understanding, the data that is in front of you, you can download it and you should be able to manifest it or manipulate it in the way that you want.</p>\n\n\n\n<p>So what I have in mind is a very visual dashboard full of charts. And the goal is to not over complicate things, which is why we are really looking at some certain KPIs for teams and for the project itself. For instance, if you look at the project, market share could be a KPI. It&#8217;s not necessarily what I, I&#8217;m just using it as an example.</p>\n\n\n\n<p>So identifying certain key metrics and building charts of various kinds which manifest this data, and to make it as user friendly, and as accessible, and accessibility in the strictest sense of the world. So that anybody with any size sort of accessibility requirement should be able to view this data and understand it. That is the vision that I personally have, and I think Courtney also has a very similar vision. So yeah, that&#8217;s what I have in mind.</p>\n\n\n\n<p>[00:34:18] Nathan Wrigley: It feels like in the year 2025, where we are at the moment, it feels as if, and we don&#8217;t need to go into the reasons. It does feel like contributor hours are more precious than they&#8217;ve ever been. And so that in and of itself is a fantastic reason to have data like this available.</p>\n\n\n\n<p>So for example, I don&#8217;t know, let&#8217;s imagine that I&#8217;m an enterprise agency and I want my contributions to really count. Well, I could throw my staff in all different directions and not really know whether they were being deployed in something which was already completely fine, or whether there was an area which really needed a bit of work. It might not be the most glamorous piece of work in the world, but it needs that work to be done.</p>\n\n\n\n<p>And because the contributor hours at the moment are, let&#8217;s use the word struggling, something like that, then having a window into what is needed, it does feel like this project has more importance now, perhaps even than just a year ago when you were sort of in the weeds of setting the whole thing up.</p>\n\n\n\n<p>[00:35:16] Hari Shanker: I cannot agree more, because I&#8217;ve tried to collect this data together, to put this together. And I&#8217;ve seen the information that it can help companies. So you mentioned organisations or companies who are contributing through Five for the Future. So I was working on Five for the Future for a long time, and I was mentoring quite a few organisations who are stepping into WordPress.</p>\n\n\n\n<p>So this data that I picked up, it really helped them. I was able to guide people into the areas that. We had folks who were doing other things, like they were able to contribute strategically, which I have specific cases of organisations who were able to improve their place in the WordPress economy by making strategy contributions.</p>\n\n\n\n<p>So this is all very linked. And again, that&#8217;s where I&#8217;m coming from. I mean, and as you said, contributor hours are very precious. I personally feel that any time or effort set towards building data oriented solution could go a long way. It is a very impactful way of contribution, and if folks are there to help it out, the potentials are limitless. That is where I&#8217;m coming from.</p>\n\n\n\n<p>[00:36:10] Nathan Wrigley: There are so many dots being connected in this episode. So we talked at the beginning about the fact that, you know, WordPress is a growing and interesting thing for the younger generation in India, but the project obviously needs contributors.</p>\n\n\n\n<p>Those contributors need to fit into the holes in the jigsaw, the bits of the jigsaw, where the pieces are missing, if you like.</p>\n\n\n\n<p>And so there&#8217;s this kind of virtuous cycle going on here where, if something like the dashboard can meaningfully impact where those contributors go, the jigsaw grows. The pieces where there&#8217;s blank missing pieces, they get filled in. And so, like I said, there&#8217;s this wonderful virtuous cycle nature to this whole thing. And what a fantastic project.</p>\n\n\n\n<p>It&#8217;s hard to encapsulate in words what you&#8217;re trying to do, but I think we did a pretty credible job of doing that. So one more time, Hari is going to be available to whichever way he described. I will put in the show notes the links to the pieces and Hari&#8217;s contact details and things like that.</p>\n\n\n\n<p>What an interesting project, one that many people I&#8217;m sure haven&#8217;t heard of. Is there anything that you wanted to say before we sign off?</p>\n\n\n\n<p>[00:37:11] Hari Shanker: Well, all I want to say is, if you&#8217;re interested in data, please consider looking into this project, or if there&#8217;s anything that you can learn from the data that we picked up. I know it&#8217;s a little old at this point. As I said, this is a project that anybody can contribute to. So even if you have insights on what data is missing or what data that you would like to see, that feedback really goes a long way.</p>\n\n\n\n<p>So feedback is the best gift that you can give in, again, in an open source project like WordPress, especially for an initiative like this. It goes a long way. So it&#8217;s a very impactful way of giving back to the project too. And I see contributions as investments, so if you would like to invest in WordPress in your free time, it&#8217;s a great way to do it by helping us build these dashboards.</p>\n\n\n\n<p>[00:37:51] Nathan Wrigley: Yeah, as you said, it&#8217;s like an impactful but kind of curious, interesting, powerful way of helping the community. And perhaps it&#8217;s something that you&#8217;d not heard of before. So Hari Shanker, thank you so much for explaining all that to me today and joining me on the podcast. I really appreciate it.</p>\n\n\n\n<p>[00:38:07] Hari Shanker: Thank you so much, Nathan. It was truly an honor to be here, and I absolutely enjoyed talking to you about my favorite topic.</p>\n</div></details>\n\n\n\n<p>On the podcast today we have <a href="https://profiles.wordpress.org/harishanker/">Hari Shanker</a>.</p>\n\n\n\n<p>Hari has been a member of the WordPress community since 2007, and has contributed in various capacities, including as a full-time contributor for several years, working with Automattic, working with initiatives like Five for the Future, and supporting numerous community events around the world. He currently volunteers his time as a community program manager, helping to grow and support the WordPress ecosystem from his home in India.</p>\n\n\n\n<p>If you’re involved in the WordPress project, you likely know just how vast and complex the contributor ecosystem can be. But you might not have heard of the WordPress Contribution Health Dashboards, an experimental initiative aimed at making sense of all the community’s moving parts, by gathering, visualising, and sharing contribution data.</p>\n\n\n\n<p>But why does WordPress need something like this? Well, it could help new and existing contributors figure out where to pitch in, and how their work might guide the project’s future growth? Hari’s here to explain.</p>\n\n\n\n<p>We start the podcast by going off on a tangent, discussing the landscape of WordPress in India. India is experiencing a huge upswell in community activity, innovation, and youth engagement, and it’s exciting to hear about it.</p>\n\n\n\n<p>We then dive into the main thrust of the podcast, the Contribution Health Dashboards, how the idea came about, who helped drive it forward, why it’s proving so challenging to build, and the massive value it promises for contributors, team reps, project leadership, and anyone curious about where WordPress needs help.</p>\n\n\n\n<p>We look at the practical aspects too. What tools are, and aren’t, available. The difficulty of tracking data across the many platforms WordPress uses, and what kinds of skills and volunteers are needed to push this work forward.</p>\n\n\n\n<p>Hari shares his vision for accessible, visual dashboards that can guide contributors of all skill sets, and help make the best use of every single contribution hour.</p>\n\n\n\n<p>If you’ve ever wondered how to make your WordPress contributions matter even more, or how the project could be better supported by data-driven insights, 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://profiles.wordpress.org/harishanker/">Hari on WordPress.org</a></p>\n\n\n\n<p><a href="https://wordpress.org/five-for-the-future/">Five for the Future</a></p>\n\n\n\n<p><a href="https://make.wordpress.org/community/handbook/contributor-day/contributor-working-group/"> WordPress Contributor Working Group</a></p>\n\n\n\n<p><a href="https://make.wordpress.org/community/handbook/contributor-day/contributor-working-group/contributor-mentorship-program-for-wordpress/"> WordPress Contributor Mentorship Program</a></p>\n\n\n\n<p><a href="https://instawp.com/"> InstaWP</a></p>\n\n\n\n<p><a href="https://rtcamp.com/">rtCamp</a></p>\n\n\n\n<p><a href="https://www.multidots.com/">Multidots</a></p>\n\n\n\n<p><a href="https://events.wordpress.org/kerala/2024/photo-festival/welcome-to-wordpress-photos-festival-2024/"> WordPress Photo Festival</a></p>\n\n\n\n<p><a href="https://events.wordpress.org/ajmer/2024/wpcampusconnect/"> WP Campus Connect</a></p>\n\n\n\n<p><a href="https://wpastra.com/"> Astra theme</a></p>\n\n\n\n<p><a href="https://asia.wordcamp.org/2026/"> WordCamp Asia in Mumbai, India in 2026</a></p>\n\n\n\n<p><a href="https://make.wordpress.org/project/2024/09/12/wordpress-contribution-health-dashboards-an-experiment/"> WordPress Contribution Health Dashboards: An Experiment</a></p>\n\n\n\n<p><a href="https://bitergia.com/bitergia-analytics/"> Bitergia</a></p>\n\n\n\n<p><a href="https://make.wordpress.org/chat/"> Make WordPress Slack</a></p>\n\n\n\n<p><a href="https://wordpress.com/p2/">P2</a></p>\n\n\n\n<p><a href="https://core.trac.wordpress.org/">WordPress Trac</a></p>\n\n\n\n<p><a href="https://github.com/WordPress">GitHub</a></p>\n\n\n\n<p><a href="https://chaoss.github.io/grimoirelab/"> GrimoireLab</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, 07 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:38;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:52:"WordPress.org blog: WordPress Campus Connect Expands";s:7:"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=18726";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:68:"https://wordpress.org/news/2025/05/wordpress-campus-connect-expands/";s: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:11780:"<p>WordPress Campus Connect, <a href="https://central.wordcamp.org/news/2024/12/wp-campus-connect-recap-a-journey-of-empowering-students-and-building-community/">initially launched in October 2024 as a pilot program</a>, has now been formally established as an official event series due to its resounding success. The inaugural program, spearheaded by myself, <a href="https://profiles.wordpress.org/anandau14/">Anand Upadhyay</a>, garnered immense enthusiasm from 400 Indian students who were eager to engage in hands-on WordPress training.</p>\n\n\n\n<figure class="wp-block-gallery has-nested-images columns-default is-cropped has-border-color has-darker-grey-background-color has-background wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" style="border-color: #1c2024; border-width: 20px; border-radius: 2px;">\n<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18733" height="683" src="https://i0.wp.com/wordpress.org/news/files/2025/05/1H4A6596.jpg?resize=1024%2C683&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18735" height="683" src="https://i0.wp.com/wordpress.org/news/files/2025/05/1H4A8902.jpg?resize=1024%2C683&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18732" height="683" src="https://i0.wp.com/wordpress.org/news/files/2025/05/1H4A6763.jpg?resize=1024%2C683&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18728" height="682" src="https://i0.wp.com/wordpress.org/news/files/2025/05/image-3.jpeg?resize=1024%2C682&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18729" height="682" src="https://i0.wp.com/wordpress.org/news/files/2025/05/image.jpeg?resize=1024%2C682&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18730" height="682" src="https://i0.wp.com/wordpress.org/news/files/2025/05/image-1.jpeg?resize=1024%2C682&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18737" height="683" src="https://i0.wp.com/wordpress.org/news/files/2025/05/1H4A8923.jpg?resize=1024%2C683&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18731" height="682" src="https://i0.wp.com/wordpress.org/news/files/2025/05/image-2.jpeg?resize=1024%2C682&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18739" height="683" src="https://i0.wp.com/wordpress.org/news/files/2025/05/1H4A8821.jpg?resize=1024%2C683&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18734" height="683" src="https://i0.wp.com/wordpress.org/news/files/2025/05/1H4A6765.jpg?resize=1024%2C683&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18741" height="683" src="https://i0.wp.com/wordpress.org/news/files/2025/05/1H4A9926.jpg?resize=1024%2C683&#038;ssl=1" width="1024" /><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<figure class="wp-block-image size-large wp-lightbox-container"><img alt="" class="wp-image-18740" height="683" src="https://i0.wp.com/wordpress.org/news/files/2025/05/1H4A9269.jpg?resize=1024%2C683&#038;ssl=1" width="1024" /><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</figure>\n\n\n\n<p>WordPress Campus Connect transcends the conventional workshop model by fostering a holistic learning community. It couples on-campus event learning with a diverse range of post-event activities, including meetups, website challenges, scholarships, and volunteering opportunities, all geared towards nurturing student development. The program&#8217;s efficacy has prompted other organizations in India to express interest in replicating its structure.</p>\n\n\n\n<p>Looking ahead, multiple local WordPress communities in India aim to reach more students in India through WordPress Campus Connect events. The curriculum will include beginner content, delve into more advanced WordPress concepts, and feature specialized sessions tailored for students with prior WordPress experience. </p>\n\n\n\n<div class="wp-block-group is-layout-constrained wp-container-core-group-is-layout-8a400663 wp-block-group-is-layout-constrained">\n<figure class="wp-block-image size-large"><img alt="" class="wp-image-18743" height="351" src="https://i0.wp.com/wordpress.org/news/files/2025/05/wpcc-logo-transparent.png?resize=1024%2C351&#038;ssl=1" width="1024" /></figure>\n</div>\n\n\n\n<p>The official recognition of WordPress Campus Connect as an event series paves the way for further expansion, giving the series similar support and standing as WordCamps but with a student education-first goal and focus. Future plans include organizing large-scale student events, establishing WordPress clubs on college campuses, and facilitating mentorship connections for students.</p>\n\n\n\n<p>To support these ambitious goals, volunteers identified several key next steps:</p>\n\n\n\n<ul class="wp-block-list">\n<li><strong>Volunteer Handbook Development:</strong> Creating a comprehensive guidebook to equip volunteers with the necessary resources and information.</li>\n\n\n\n<li><strong>GatherPress Integration:</strong> Exploring the feasibility of integrating GatherPress as a tool for student groups.</li>\n\n\n\n<li><strong>Volunteer Recruitment:</strong> Actively seeking and onboarding volunteers to support WordPress Campus Connect initiatives through activities such as:\n<ol class="wp-block-list">\n<li>Creating a workflow and guidelines for processing Student Club applications</li>\n\n\n\n<li>On-site facilitation or assistance for WordPress Campus Connect events</li>\n</ol>\n</li>\n\n\n\n<li><strong>Landing Page Creation</strong>: Creating a landing page describing what WordPress Campus Connect is all about</li>\n\n\n\n<li><strong>Student Groups: </strong>Drafting a framework for students to create their own groups for hosting WordPress events and activities. </li>\n</ul>\n\n\n\n<p>The overwhelming success of WordPress Campus Connect and the enthusiasm it has generated serve as a testament to the transformative power of passion and dedication. As WordPress Campus Connect continues to evolve and expand, it holds the promise of shaping the future of WordPress education and community engagement.</p>\n\n\n\n<p class="has-off-white-background-color has-background">If you’re interested in helping shape the future of education with WordPress, <a href="https://wordpress.slack.com/archives/C08QK4V94AF">join us in the #campusconnect Make Slack channel</a> today!</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, 07 May 2025 12:40:19 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:14:"Anand Upadhyay";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:39;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:102:"Do The Woo Community: How the Friends Plugin Turns Your WordPress Site into a Decentralized Social Hub";s:7:"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=96754";s:7:"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/how-the-friends-plugin-turns-your-wordpress-site-into-a-decentralized-social-hub/";s: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:165:"The Friends plugin for WordPress lets you create your own private social feed, sharing posts with friends while keeping everything decentralized and in your control.";s: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, 07 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:40;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:48:"Do The Woo Community: Migrating CPT’s to Posts";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:43:"https://dothewoo.io/?post_type=blog&p=96735";s:7:"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:49:"https://dothewoo.io/blog/migrating-cpts-to-posts/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:82:"Waiting on some work done before I move these daily posts to my new personal blog.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 07 May 2025 06:52:50 +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:41;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:24:"Matt: Remember Gravatar?";s:7:"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=142243";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:40:"https://ma.tt/2025/05/remember-gravatar/";s: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:1204:"<p>Gravatar has always been about giving people control over their identity online. One avatar, one profile, synced across the web, verified connections, with a fully open API.</p>\n\n\n\n<p>Gravatar is a true open identity layer for the internet, <a href="https://blog.gravatar.com/2025/05/06/build-your-ai-identity-with-gravatars-new-tool/">and now for AI</a>. </p>\n\n\n\n<p>For <a href="https://docs.gravatar.com/">developers</a>, we’ve rolled out mobile SDKs and a revamped REST API that lets you fetch avatars and profile data with just an email hash. Whether you&#8217;re building a blog, a community, or an AI agent that needs to understand who it&#8217;s talking to, Gravatar provides the infrastructure to make identity seamless and user-centric. </p>\n\n\n\n<p>It’s free, open, and built with developers in mind. We believe identity should belong to the individual, not be locked behind proprietary platforms. Gravatar is our contribution to that vision.​</p>\n\n\n\n<p>If you haven’t checked it out lately, now’s a great time to explore what <a href="https://gravatar.com">Gravatar</a> can do for your app or your online presence. And think about how your apps can drive more Gravatar signups.</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, 06 May 2025 16:27:46 +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:42;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:59:"Gravatar: Build Your AI Identity with Gravatar’s New Tool";s:7:"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=3202";s:7:"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:84:"https://blog.gravatar.com/2025/05/06/build-your-ai-identity-with-gravatars-new-tool/";s: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:7140:"<p>Your Gravatar profile has always been your digital business card for the web. </p>\n\n\n\n<p>And now, it&#8217;s becoming your identity for AI.</p>\n\n\n\n<p>With our <strong>AI Profile Builder</strong>, you create a simple, portable version of <em>you</em> — your background, interests, preferences, and links — ready for AI tools to use. Build your profile once, and take it everywhere. From chatbots to content generators to recommendation engines, AI agents can finally understand <em>who you are.</em></p>\n\n\n\n<p><em>For developers, <a href="https://blog.gravatar.com/feed/#developers">scroll to the end</a> to learn how to use this in your app or website, too!</em></p>\n\n\n\n<h2 class="wp-block-heading">How it works</h2>\n\n\n\n<div class="wp-block-group has-contrast-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-d82b09b0 wp-block-group-is-layout-constrained">\n<div class="wp-block-jetpack-slideshow aligncenter"><div class="wp-block-jetpack-slideshow_container swiper-container"><ul class="wp-block-jetpack-slideshow_swiper-wrapper swiper-wrapper"><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="Screenshot of Gravatar''s AI profile builder" class="wp-block-jetpack-slideshow_image wp-image-3257" height="1598" src="https://blog.gravatar.com/wp-content/uploads/2025/05/cleanshot-2025-05-01-at-10.45.39402x.png" width="2968" /></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="Screenshot of ChatGPTs personalization settings." class="wp-block-jetpack-slideshow_image wp-image-3226" height="1100" src="https://blog.gravatar.com/wp-content/uploads/2025/05/cleanshot-2025-05-01-at-09.27.45-2402x.png" width="1900" /></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="Screenshot of Claude''s personalization settings." class="wp-block-jetpack-slideshow_image wp-image-3227" height="1100" src="https://blog.gravatar.com/wp-content/uploads/2025/05/claude.png" width="1900" /></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="Screenshot of Gemini''s personalization settings." class="wp-block-jetpack-slideshow_image wp-image-3229" height="1100" src="https://blog.gravatar.com/wp-content/uploads/2025/05/gemini.png" width="1900" /></figure></li><li class="wp-block-jetpack-slideshow_slide swiper-slide"><figure><img alt="Screenshot of Perplexity''s personalization settings." class="wp-block-jetpack-slideshow_image wp-image-3230" height="1100" src="https://blog.gravatar.com/wp-content/uploads/2025/05/perplexity.png" width="1900" /></figure></li></ul><a class="wp-block-jetpack-slideshow_button-prev swiper-button-prev swiper-button-white"></a><a class="wp-block-jetpack-slideshow_button-next swiper-button-next swiper-button-white"></a><a class="wp-block-jetpack-slideshow_button-pause"></a><div class="wp-block-jetpack-slideshow_pagination swiper-pagination swiper-pagination-white"></div></div></div>\n</div>\n\n\n\n<p>The AI Profile Builder takes what makes you <em>you</em> and translates it into a format that AI systems easily understand:</p>\n\n\n\n<ol class="wp-block-list">\n<li><strong>Fill out your Gravatar profile</strong><br />The more fields you complete, the smarter your AI experiences get.</li>\n\n\n\n<li><strong>Set your preferences</strong><br />Choose how you like to communicate — tone, depth, and humor.</li>\n\n\n\n<li><strong>Copy your AI-ready profile</strong><br />We hand you a tidy little markdown file. Portable and paste-ready.</li>\n\n\n\n<li><strong>Paste into any AI tool</strong><br />Voilà. Personalized AI without all the constant tweaking.</li>\n</ol>\n\n\n\n<p><a href="https://gravatar.com/profile/tools/ai-profile">Build your AI profile now →</a></p>\n\n\n\n<h2 class="wp-block-heading">Real-life use cases</h2>\n\n\n\n<p>Here’s a video showing how Gravatar profiles can personalize AI responses when filling out PDFs and scheduling daily briefings.</p>\n\n\n\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<div class="embed-youtube"></div>\n</div></figure>\n\n\n\n<p>This isn&#8217;t just convenience — it&#8217;s giving you control over your AI interactions.</p>\n\n\n\n<p>Here are a few more examples:</p>\n\n\n\n<p><strong>Hobbies and Interests</strong></p>\n\n\n\n<ul class="wp-block-list">\n<li><strong>Generic response</strong>: &#8220;Here&#8217;s how to get started with photography.&#8221;</li>\n\n\n\n<li><strong>Personalized response</strong>: &#8220;Given your interest in outdoor adventure and wildlife, I’d suggest focusing on landscape and nature photography, and here&#8217;s a specific guide tailored to that.&#8221;</li>\n</ul>\n\n\n\n<p><strong>Location-Based Recommendations</strong></p>\n\n\n\n<ul class="wp-block-list">\n<li><strong>Generic response</strong>: &#8220;Here’s how to prepare for severe weather.&#8221;</li>\n\n\n\n<li><strong>Personalized response</strong>: &#8220;Considering you live in Florida, here&#8217;s a personalized checklist to prepare your home specifically for hurricanes.&#8221;</li>\n</ul>\n\n\n\n<p><strong>Communication Preferences</strong></p>\n\n\n\n<ul class="wp-block-list">\n<li><strong>Generic</strong> <strong>response</strong>: &#8220;Here&#8217;s what happened today in the stock market.&#8221;</li>\n\n\n\n<li><strong>Personalized</strong> <strong>response</strong>: &#8220;Since you like it short and snappy with a side of sarcasm: the market took a tiny nap today — slightly down overall. Apple and Tesla dropped 1–2%, probably just tripping over their own hype again.&#8221;</li>\n</ul>\n\n\n\n<h2 class="wp-block-heading" id="developers">For developers</h2>\n\n\n\n<p>Want to personalize your product instantly?</p>\n\n\n\n<p>Just a few lines of code, and your app can adapt to each user’s communication style, bio, even verified socials. </p>\n\n\n\n<pre class="wp-block-code has-border-color has-base-border-color has-contrast-color has-tertiary-background-color has-text-color has-background has-link-color wp-elements-e3fbdb130660892f82c0f9a20751ab8d" style="border-width: 1px; margin-top: 12px; margin-bottom: 12px; padding-top: 4px; padding-bottom: 4px;"><code>https:&#047;&#047;gravatar.com/{EmailHash}.md </code></pre>\n\n\n\n<p>You can grab Gravatar profiles via a <span style="text-decoration: underline;">simple markdown</span> request, our <a href="https://docs.gravatar.com/rest-api/">REST API</a>, or <a href="https://docs.gravatar.com/mobile-sdk/">mobile SDKs</a> — and yep, as part of the open web, they’re free to use.</p>\n\n\n\n<h2 class="wp-block-heading">Own your AI identity today</h2>\n\n\n\n<p>Unlike black-box AI systems that build hidden profiles about you, Gravatar&#8217;s approach is transparent and user-controlled.</p>\n\n\n\n<p><strong>Ready to personalize your AI experiences?</strong></p>\n\n\n\n<p>Head to your <a href="https://gravatar.com/profile/tools/ai-profile">Gravatar dashboard</a> and spin up your AI-ready profile.</p>\n\n\n\n<p>Devs — we’ve got <a href="https://docs.gravatar.com">integration docs and guides</a> waiting for you.</p>\n\n\n\n<p><em>Happy AI-ing!</em></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, 06 May 2025 14:34: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:43;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:89:"Do The Woo Community: All Things WordCamp Lisboa 2025 with Marco Almeida and Hacer Yilmaz";s:7:"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=96691";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:87:"https://dothewoo.io/all-things-wordcamp-lisboa-2025-with-marco-almeidaand-hacer-yilmaz/";s: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:235:"In this episode, BobWP chats with WordCamp Lisboa organizers Hacer and Marco about the upcoming event, highlighting the new Community and Contribution Day, diverse sessions, language inclusivity, and the importance of community spirit.";s: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, 06 May 2025 14:05: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:44;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:39:"Do The Woo Community: AI Hallucinations";s:7:"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=96668";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:43:"https://dothewoo.io/blog/ai-hallucinations/";s: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:49:"Hallucinations, it''s all a matter of perspective.";s: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, 06 May 2025 09:12:40 +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:45;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:63:"Gravatar: How to Configure Gravatar Image Size Across Your Site";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:32:"http://blog.gravatar.com/?p=3266";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:57:"https://blog.gravatar.com/2025/05/05/gravatar-image-size/";s: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:12883:"<p>So, you’ve decided it’s time to improve the Gravatar images on your site. Maybe they’re too small, stretched oddly, or don’t match your stylish new design.</p>\n\n\n\n<p>Whatever the reason, pic size matters. It can shape the feel of your comment threads, how fast pages load, and how polished your entire site looks at first glance.</p>\n\n\n\n<p>Small tweak. Big impact.</p>\n\n\n\n<p>Luckily, you don’t need to be a developer, designer, or go rage-Googling CSS selectors to pull this off. You just need a smart approach, and that’s exactly what you’ll find here.</p>\n\n\n\n<p>In this guide, we’ll show you how to:</p>\n\n\n\n<ul class="wp-block-list">\n<li>Make site-wide Gravatar changes using WordPress’s built-in functions</li>\n\n\n\n<li>Use CSS to finesse specific sections (think: Comments, author bios, anywhere Gravatar images show up)</li>\n\n\n\n<li>Go responsive, so your Gravatar images look fabulous on every screen from the iPhone to large 4k monitors</li>\n</ul>\n\n\n\n<p>Let’s get started.</p>\n\n\n\n<figure class="wp-block-image size-full"><a href="https://docs.gravatar.com/getting-started/"><img alt="" class="wp-image-2632" height="729" src="https://blog.gravatar.com/wp-content/uploads/2024/12/gravatar_integration_cta.png" width="3242" /></a></figure>\n\n\n\n<h2 class="wp-block-heading">Default Gravatar sizes and why you might want to change them</h2>\n\n\n\n<p>By default, Gravatar hands you an <a href="https://docs.gravatar.com/api/avatars/images/">80×80 pixel image</a>. WordPress then <a href="https://codex.wordpress.org/Using_Gravatars">ups that to 96×96</a>, because… reasons. But here’s where it gets messy: Your theme probably has <em>its</em> own ideas. Some use 60px. Others? 80px.</p>\n\n\n\n<p>The result? Inconsistency. And that’s the enemy of good design.</p>\n\n\n\n<p>Here’s why resizing is worth your time:</p>\n\n\n\n<ul class="wp-block-list">\n<li><strong>Visual hierarchy:</strong> Want admin replies to stand out? Bigger avatars can subtly guide the eye.</li>\n\n\n\n<li><strong>Mobile friendliness:</strong> On smaller screens, smaller avatars = less chaos.</li>\n\n\n\n<li><strong>Brand consistency:</strong> Everything should look intentional, including your floating faces.</li>\n\n\n\n<li><strong>Engagement:</strong> Well-sized avatars make people feel seen (literally), boosting community engagement.</li>\n</ul>\n\n\n\n<p>And let’s not forget performance. Larger images = heavier pages = slower load times. Too small? You risk pixelation when scaled up via CSS. Lose-lose.</p>\n\n\n\n<p>Luckily, many modern themes (looking at you, <a href="https://wordpress.org/themes/twentytwentyfive/">Twenty Twenty-Five</a>) let you adjust avatar sizes right from the design panel – no code required. Just head to the “Comments” section and tweak away.</p>\n\n\n\n<p>But what if your theme lacks this functionality? Or if you want finer control?</p>\n\n\n\n<p>That’s when custom solutions come into play via WordPress functions, a dash of CSS, or the occasional PHP snippet. Don’t worry, we’ll walk you through it.</p>\n\n\n\n<p>Let’s get into the how.</p>\n\n\n\n<h2 class="wp-block-heading">Method 1: Changing Gravatar size using WordPress functions</h2>\n\n\n\n<p>If you want full control over how big (or small) your Gravatars show up – without relying on your theme’s whims – WordPress has your back.</p>\n\n\n\n<p>Under the hood, <a href="https://docs.gravatar.com/sdk/images/">WordPress talks to Gravatar’s servers</a> using a handy little parameter: s= or size=. That’s how it tells Gravatar exactly what size image to serve up, rather than grabbing one and awkwardly stretching or shrinking it in the browser.</p>\n\n\n\n<p>If you want to make a site-wide change, add this simple snippet to your <strong>child theme’s</strong> functions.php file:</p>\n\n\n\n<pre class="wp-block-code"><code>function custom_avatar_size( $avatar_defaults ) {\n\nreturn 120; // Change to your desired size in pixels\n\n}\n\nadd_filter( ''avatar_defaults'', ''custom_avatar_size'' );</code></pre>\n\n\n\n<p>Voilà,<strong> </strong>just like that, every Gravatar across your site obeys your chosen size like a well-trained pixel soldier.</p>\n\n\n\n<p>Want to go a step further? You can tell WordPress to serve up different sizes depending on <em>where</em> the avatar appears. Here’s how:</p>\n\n\n\n<pre class="wp-block-code"><code>function context_based_avatar_size( $args ) {\nif ( is_single() ) {\n$args&#091;''size''] = 150; // Larger on single posts\n} elseif ( is_archive() ) {\n$args&#091;''size''] = 80; // Smaller on archive pages\n}\nreturn $args;\n}\nadd_filter( ''pre_get_avatar_data'', ''context_based_avatar_size'' );</code></pre>\n\n\n\n<h3 class="wp-block-heading"><strong>Why this approach rocks:</strong></h3>\n\n\n\n<ul class="wp-block-list">\n<li>One change = site-wide consistency</li>\n\n\n\n<li>WordPress handles all the caching and optimization behind the scenes</li>\n\n\n\n<li>You can tailor avatar sizes by context (posts, archives, comments, you name it)</li>\n\n\n\n<li>It taps directly into Gravatar’s API, so you’re getting the cleanest possible image at the right size</li>\n</ul>\n\n\n\n<h3 class="wp-block-heading"><strong>Bonus round: Smart Gravatar sizing in the comments section</strong></h3>\n\n\n\n<p>Want to get <em>really</em> clever? Try creating a visual hierarchy in your comments section. For example: Larger avatars for parent comments, slightly smaller ones for replies. It helps users follow the conversational flow without even thinking about it.</p>\n\n\n\n<p>Here’s a quick function that adjusts avatar size based on comment depth:</p>\n\n\n\n<pre class="wp-block-code"><code>function comment_depth_avatar_size( $args, $id_or_email ) {\n\n$comment = get_comment( $id_or_email );\n\nif ( $comment ) {\n\n$depth = 1; // Default depth\n\nif ( isset( $comment-&gt;comment_parent ) &amp;&amp; $comment-&gt;comment_parent &gt; 0 ) {\n\n$depth = 2; // Reply\n\n}\n\n// Set size based on comment depth\n\n$args&#091;''size''] = 140 - (($depth - 1) * 20); // Parent: 140px, Reply: 120px\n\n}\n\nreturn $args;\n\n}\n\nadd_filter( ''pre_get_avatar_data'', ''comment_depth_avatar_size'', 10, 2 );</code></pre>\n\n\n\n<p>Suddenly, your comments section feels less like a block of text and more like a layered conversation.</p>\n\n\n\n<h3 class="wp-block-heading"><strong>Pro Tip: Nudge users to create their own Gravatar</strong></h3>\n\n\n\n<p>Lots of users will unintentionally default to the “Mystery Man” look if they haven’t gotten around to <a href="https://blog.gravatar.com/2024/07/19/wordpress-profile-picture/">customizing their Gravatar profile</a>. Want to fix that? Add a friendly prompt under your comment form:</p>\n\n\n\n<pre class="wp-block-code"><code>function gravatar_comment_form_note( $defaults ) {\n\n$defaults&#091;''comment_notes_after''] .= ''\n\nNeed a profile picture? Create a free Gravatar.\n\n'';\n\nreturn $defaults;\n\n}\n\nadd_filter( ''comment_form_defaults'', ''gravatar_comment_form_note'' );</code></pre>\n\n\n\n<p>Now you’re not just upgrading your design, you’re also helping your community show up in style.</p>\n\n\n\n<p>And if you’re feeling adventurous, there’s room to dream even bigger. Think: Larger avatars for top commenters, custom styles for admins or team members, maybe even a “featured contributor” badge with its own Gravatar flair. Totally doable.</p>\n\n\n\n<p>Just one golden rule: <strong>Always add your code to a child theme</strong>. Editing the parent theme directly is a one-way ticket to heartbreak when updates roll through. Protect your tweaks, keep them safe, and your beautifully resized avatars will live to see another theme update.</p>\n\n\n\n<h2 class="wp-block-heading">Method 2: Styling Gravatar images with CSS (aka the quick-and-clean route)</h2>\n\n\n\n<p>So maybe PHP isn’t your thing. Or maybe you just want a faster win – less code, more impact. Enter CSS: The styling powerhouse that lets you tweak how Gravatars <em>look</em> without changing how they’re fetched from the server.</p>\n\n\n\n<p>Now, fair warning: This won’t change the file size of the image being downloaded (Gravatar’s still sending the default size), but it <em>will</em> control how those avatars show up on screen. Think of it like wardrobe tailoring for profile pics – same body, better fit.</p>\n\n\n\n<p>Here’s how to get started:</p>\n\n\n\n<ol class="wp-block-list">\n<li>Head to your WordPress dashboard</li>\n\n\n\n<li>Go to <strong>Appearance &gt; Customize</strong></li>\n\n\n\n<li>Click on <strong>“Additional CSS”</strong></li>\n\n\n\n<li>Drop in your magic below</li>\n</ol>\n\n\n\n<p>Want to resize comment Gravatars? Easy:</p>\n\n\n\n<p>.comment-avatar img { width: 60px; height: 60px; }</p>\n\n\n\n<p>Want to ditch the boxy default look and go full circle-chic? Say no more:</p>\n\n\n\n<p>.avatar { border-radius: 50%; border: 2px solid #ddd; }</p>\n\n\n\n<p>Designing for mobile, too (as you should be)? Add some media query magic:</p>\n\n\n\n<p>@media (max-width: 768px) { .avatar { width: 40px; height: 40px; } }</p>\n\n\n\n<p>And just like that, your Gravatar images adapt to screen sizes like design-savvy little shapeshifters.</p>\n\n\n\n<h3 class="wp-block-heading"><strong>Ready to get extra? Let’s talk hover effects</strong></h3>\n\n\n\n<p>Once you’ve nailed the sizing basics, there’s a whole world of style upgrades waiting. You could create a hover effect that reveals a mini bio – or even a clickable “Gravatar card” with links, job titles, or a cheeky quote from their profile.</p>\n\n\n\n<p>With the right mix of CSS and PHP, you can turn every Gravatar image into a micro-interaction that deepens community engagement <em>without</em> sending users off-site.</p>\n\n\n\n<p>Imagine: Someone hovers over a commenter’s face, and a sleek little popup shows their Gravatar bio, links, or even their other recent comments. Trust, familiarity, and engagement, all from a 60&#215;60 pixel image.</p>\n\n\n\n<p>Bottom line: CSS is your best friend when you want fast, flexible avatar control – no server changes, no code anxiety. Just pure visual finesse.</p>\n\n\n\n<h2 class="wp-block-heading">Go beyond size: Turn Gravatars into engagement powerhouses</h2>\n\n\n\n<p>So, you’ve nailed the sizing. Your avatars are looking slick, snappy, and totally on-brand. But, plot twist: Gravatar isn’t <em>just</em> a pixel-perfect profile pic tool – it’s a full-blown identity engine. And you’re only scratching the surface.</p>\n\n\n\n<p>Gravatar profiles come loaded with gold: Bios, websites, social links, even job titles. All that data lives on<a href="https://gravatar.com"> Gravatar.com</a>, just waiting to be pulled into your site.</p>\n\n\n\n<p>What can you do with it? Oh, just a few small things like&#8230;</p>\n\n\n\n<ul class="wp-block-list">\n<li><strong>Auto-populate author bios</strong> with real backgrounds, no manual copy-pasting required </li>\n\n\n\n<li><strong>Create hover cards</strong> that spill the tea (professionally, of course) when you hover over a commenter’s face</li>\n\n\n\n<li><strong>Build a community directory</strong> that looks like LinkedIn, but without the corporate cringe</li>\n\n\n\n<li><strong>Add verification badges</strong> to reward users with full, legitimate profiles</li>\n</ul>\n\n\n\n<p>The result? A more cohesive, more connected site experience, with <em>less</em> work for your users and <em>more</em> trust baked in.</p>\n\n\n\n<p>Gravatar’s &#8220;update once, sync everywhere&#8221; model means no more tedious form-filling. Users update their info once, and it syncs across every site they interact with, including yours.</p>\n\n\n\n<p>And if you’re running a site where you want users to change their avatar <em>without</em> leaving, <a href="https://docs.gravatar.com/guides/quickeditor/"><strong>Gravatar Quick Editor</strong></a> adds a sleek popup editor right on your site. <em>Very</em> user-friendly.</p>\n\n\n\n<h3 class="wp-block-heading"><strong>Unlock the power of Gravatar</strong></h3>\n\n\n\n<p>Now you’ve got resizing down, it&#8217;s time to have some fun. Use the code examples from this guide as your launchpad. Build confidence with each tweak. Try new things. Break stuff (safely). Learn. Repeat.</p>\n\n\n\n<p>And when you’re ready to go full power-user? <a href="https://docs.gravatar.com/">Gravatar’s developer docs</a> are your secret weapon. They’re packed with everything from API tricks to integration ideas that’ll help you turn avatars into fully-fledged community features – everything you need to <a href="https://docs.gravatar.com/">explore the full power of Gravatar and supercharge your site</a>. </p>\n\n\n\n<p>Gravatar isn’t just an image. It’s identity, personality, and participation, all rolled into one little square (or circle, thanks to your shiny new CSS).</p>\n\n\n\n<p>Let’s turn those pixels into something powerful.</p>\n\n\n\n<figure class="wp-block-image size-full"><a href="https://docs.gravatar.com/getting-started/"><img alt="" class="wp-image-2632" height="729" src="https://blog.gravatar.com/wp-content/uploads/2024/12/gravatar_integration_cta.png" width="3242" /></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:"Mon, 05 May 2025 16:01:21 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s: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:46;a:6:{s:4:"data";s:21:"\n	\n	\n	\n	\n	\n	\n	\n	\n	\n	\n";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:60:"Gravatar: 5 Ways Top Consultants Build Their Personal Brands";s:7:"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=3160";s:7:"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://blog.gravatar.com/2025/05/05/personal-branding-for-consultants/";s: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:18807:"<p>Consultants today face an intense competitive squeeze. On one side, established consulting giants with massive resources and brand recognition. On the other, a flood of independent specialists is expected as the consulting industry expands rapidly, now approaching <a href="https://www.statista.com/topics/8112/global-consulting-services-industry/#topicOverview">$1 trillion in value with over 838,000 management consultants in the US alone</a>.  </p>\n\n\n\n<p>Yet, amid this competition, certain consultants consistently attract premium clients and command fees significantly above the industry average of $212,000 per consultant. Their secret? Strategic personal branding that showcases specialized expertise rather than mere availability.</p>\n\n\n\n<p>These successful consultants understand that clients aren&#8217;t simply looking for someone who can help – they&#8217;re searching for the definitive authority who can solve their specific problems.</p>\n\n\n\n<p>In this article, we&#8217;ll show proven methods that top consultants use to build authority and attract enterprise clients, helping you establish verified professional credibility across platforms.</p>\n\n\n\n<h2 class="wp-block-heading"><strong>5 ways top consultants command premium fees through personal branding</strong></h2>\n\n\n\n<p>Successful consultants understand that it’s not enough to just offer services; true success lies in creating a <a href="https://blog.gravatar.com/2024/04/10/personal-branding-tools/">strategic personal brand</a> that fosters trust and commands premium fees. In a consulting marketplace approaching $1 trillion in value, the difference between average and exceptional often comes down to brand positioning.</p>\n\n\n\n<p>The most effective consultant brands aren&#8217;t created by accident. They&#8217;re built through deliberate strategies working in concert:</p>\n\n\n\n<ol class="wp-block-list">\n<li>Creating a verified consulting presence across multiple platforms.</li>\n\n\n\n<li>Strategically collecting and showcasing client testimonials.</li>\n\n\n\n<li>Developing authority-building professional partnerships.</li>\n\n\n\n<li>Using content marketing to demonstrate specialized expertise.</li>\n\n\n\n<li>Measuring and optimizing branding efforts based on revenue impact.</li>\n</ol>\n\n\n\n<p>Each of these approaches contributes to a cohesive brand that positions you as the go-to authority in your field. Let&#8217;s explore how successful consultants implement these strategies to attract high-value clients and command rates well above the industry average.</p>\n\n\n\n<h3 class="wp-block-heading"><strong>1. Build authority with a verified consulting presence</strong></h3>\n\n\n\n<p>Top consultants leverage a <a href="https://dotdigital.com/blog/a-complete-guide-on-cross-channel-omnichannel-and-multi-channel-marketing/">multi-channel strategy</a> to establish credibility and demonstrate expertise. This approach extends their reach while creating multiple touchpoints for potential clients to