


<h3 class="wp-block-heading"><strong>After-Party on the Nile</strong></h3>



<p>The event concluded with an unforgettable <strong>after-party</strong> at the <strong>Source of the Nile</strong>, where participants networked, shared stories, and reflected on two days of community connection and creative exploration. The boat ride to the source of the Nile closed off such an eventful experience.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img alt="" class="wp-image-827" src="https://jinja.wordcamp.org/2025/files/2025/06/IMG_3273-1024x768.jpg" /></figure>



<figure class="wp-block-image size-large"><img alt="" class="wp-image-811" src="https://jinja.wordcamp.org/2025/files/2025/06/IMG_0175-1024x683.jpg" /></figure>
</figure>



<figure class="wp-block-image size-large"><img alt="" class="wp-image-824" src="https://jinja.wordcamp.org/2025/files/2025/06/IMG_0092-1-1024x794.jpg" /></figure>



<h2 class="wp-block-heading"><strong>Thank You!</strong></h2>



<p>We are deeply grateful to:</p>



<ul class="wp-block-list">
<li>Our over <strong>250+ attendees and participants</strong> especially all the students for bringing their energy and enthusiasm for learning<br /></li>



<li>Our <strong>amazing speakers and workshop facilitators</strong><strong><br /></strong></li>



<li>Our <strong>sponsors and partners</strong> for their generous support<br /></li>



<li>Our <strong>volunteers</strong> who made everything run smoothly<br /></li>
</ul>



<p>Your commitment and passion made this year’s WordCamp Jinja the <strong>biggest and most impactful yet</strong>! </p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-embed alignright is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet"><p dir="ltr" lang="en">Happening Now: Patrick Lumumba  <a href="https://twitter.com/lumiblog?ref_src=twsrc%5Etfw">@lumiblog</a> from Kenya delivering his presentation on Contributing to WordPress: Making an Impact on the Test Team—With or Without Coding Skills <a href="https://twitter.com/WordPressJinja?ref_src=twsrc%5Etfw">@WordPressJinja</a><a href="https://t.co/yponyClmwm">https://t.co/yponyClmwm</a> <a href="https://twitter.com/hashtag/WordCampJinja?src=hash&amp;ref_src=twsrc%5Etfw">#WordCampJinja</a> <a href="https://t.co/W75ZJ23dIA">pic.twitter.com/W75ZJ23dIA</a></p>&mdash; Mukalele Rogers (@mrogers4christ) <a href="https://twitter.com/mrogers4christ/status/1926207964743938443?ref_src=twsrc%5Etfw">May 24, 2025</a></blockquote>
</div></figure>



<figure class="wp-block-embed alignright is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet"><p dir="ltr" lang="en">Happening now! <a href="https://twitter.com/hashtag/WordCampJinja?src=hash&amp;ref_src=twsrc%5Etfw">#WordCampJinja</a> 2025 is live at Jinja S.S School with insightful sessions<br /> Extending WordPress Block Editor with Spectra and Website Hackathon workshops led by  @rogersmukalele<a href="https://twitter.com/wmjackson?ref_src=twsrc%5Etfw">@wmjackson</a> <a href="https://twitter.com/WordPressJinja?ref_src=twsrc%5Etfw">@WordPressJinja</a><a href="https://twitter.com/NorahBetsy?ref_src=twsrc%5Etfw">@NorahBetsy</a> <a href="https://t.co/sej7sEcfPl">pic.twitter.com/sej7sEcfPl</a></p>&mdash; Jinja WordPress Meetup (@WordPressJinja) <a href="https://twitter.com/WordPressJinja/status/1926195145373819348?ref_src=twsrc%5Etfw">May 24, 2025</a></blockquote>
</div></figure>



<figure class="wp-block-embed alignright is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet"><p dir="ltr" lang="en">Jinja day 2 <img alt="🇺🇬" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f1fa-1f1ec.png" style="height: 1em;" /><br />I'm glad to see students and Genzs this committed<img alt="❤" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/2764.png" style="height: 1em;" /><img alt="❤" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/2764.png" style="height: 1em;" /><a href="https://twitter.com/hashtag/WordCampJinja?src=hash&amp;ref_src=twsrc%5Etfw">#WordCampJinja</a><a href="https://twitter.com/hashtag/WordPressOnTheNile2025?src=hash&amp;ref_src=twsrc%5Etfw">#WordPressOnTheNile2025</a> <a href="https://twitter.com/hashtag/TechWithTwin?src=hash&amp;ref_src=twsrc%5Etfw">#TechWithTwin</a> <a href="https://t.co/9DcQnGtseQ">pic.twitter.com/9DcQnGtseQ</a></p>&mdash; TechWithTwin (@techwithtwin) <a href="https://twitter.com/techwithtwin/status/1926578521154932862?ref_src=twsrc%5Etfw">May 25, 2025</a></blockquote>
</div></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-embed alignleft is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet"><p dir="ltr" lang="en">Don't miss out on the amazing learning, networking and fun at  <a href="https://twitter.com/hashtag/WordCampJinja?src=hash&amp;ref_src=twsrc%5Etfw">#WordCampJinja</a> 24th-25th May 2025. We have an amazing set of speakers, sessions and activities this year. <br /><br />Secure your spot here: <a href="https://t.co/PVtyJ87ePr">https://t.co/PVtyJ87ePr</a><a href="https://twitter.com/hashtag/WordCampJinja?src=hash&amp;ref_src=twsrc%5Etfw">#WordCampJinja</a> <a href="https://twitter.com/hashtag/WordPress?src=hash&amp;ref_src=twsrc%5Etfw">#WordPress</a> <a href="https://twitter.com/hashtag/Jinja?src=hash&amp;ref_src=twsrc%5Etfw">#Jinja</a> 1/6 <a href="https://t.co/riQhoIiRmo">pic.twitter.com/riQhoIiRmo</a></p>&mdash; Jinja WordPress Meetup (@WordPressJinja) <a href="https://twitter.com/WordPressJinja/status/1922564449837216202?ref_src=twsrc%5Etfw">May 14, 2025</a></blockquote>
</div></figure>



<figure class="wp-block-embed alignleft is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet"><p dir="ltr" lang="en">We’re excited to be part of <a href="https://twitter.com/hashtag/WordCampJinja?src=hash&amp;ref_src=twsrc%5Etfw">#WordCampJinja</a> 2025!<br />Connecting with the amazing WordPress community, sharing ideas, and learning from others.<br />Grateful for the energy, inspiration, and all the new connections!<a href="https://twitter.com/hashtag/WordCampJinja?src=hash&amp;ref_src=twsrc%5Etfw">#WordCampJinja</a> <a href="https://twitter.com/hashtag/WordPressUG?src=hash&amp;ref_src=twsrc%5Etfw">#WordPressUG</a> <a href="https://twitter.com/hashtag/WordCamp2025?src=hash&amp;ref_src=twsrc%5Etfw">#WordCamp2025</a> <a href="https://twitter.com/hashtag/sharebilityug?src=hash&amp;ref_src=twsrc%5Etfw">#sharebilityug</a> <a href="https://t.co/GJP1QfdMd0">pic.twitter.com/GJP1QfdMd0</a></p>&mdash; MACARENA (@renadevug) <a href="https://twitter.com/renadevug/status/1926578021722407181?ref_src=twsrc%5Etfw">May 25, 2025</a></blockquote>
</div></figure>



<figure class="wp-block-embed alignleft is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet"><p dir="ltr" lang="in">Jinja day 1 <img alt="🥳" class="wp-smiley" src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f973.png" style="height: 1em;" /><a href="https://twitter.com/hashtag/WordCampJinja?src=hash&amp;ref_src=twsrc%5Etfw">#WordCampJinja</a><a href="https://twitter.com/hashtag/WordPressOnTheNile2025?src=hash&amp;ref_src=twsrc%5Etfw">#WordPressOnTheNile2025</a><a href="https://twitter.com/hashtag/TechWithTwin?src=hash&amp;ref_src=twsrc%5Etfw">#TechWithTwin</a> <a href="https://t.co/vZxnrfLBzd">pic.twitter.com/vZxnrfLBzd</a></p>&mdash; TechWithTwin (@techwithtwin) <a href="https://twitter.com/techwithtwin/status/1926221392137122218?ref_src=twsrc%5Etfw">May 24, 2025</a></blockquote>
</div></figure>
</div>
</div>
</div></div>



<h2 class="wp-block-heading"><strong>What Next</strong></h2>



<p>Don’t forget to follow<a href="https://twitter.com/WordPressJinja"> @WordPressJinja</a> for continued updates.</p>



<p>Uganda is one of the places with the highest turnover of WordPress events and a vibrant, supportive, and passionate WordPress community with over 8 WordPress events a year. Including Next Gens and Do Actions. Next inline is the <a href="https://events.wordpress.org/uganda/2025/competition/">Uganda Websites Projects Competition</a> on 20th June 2025 and <a href="https://masaka.wordcamp.org/2025/">WordCamp Masaka</a> on 18th and 19th July 2025 with more to follow in the coming months.</p>



<p>Remember to join our <a href="https://www.meetup.com/Jinja-WordPress-Meetup/">WordPress Jinja Meetup</a> community for timely updates as well. We can’t wait to welcome you to all WordPress Jinja meetups, creative and developer centric next-gen events and <strong>WordCamp Jinja 2026</strong> — which shall be even bigger and more impactful, let’s continue to create, impact, and explore together with WordPress!</p>



<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, 07 Jun 2025 13:18:58 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:18:"Mohammed Kateregga";s: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:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:55:"Open Channels FM: Version 6.0 OpenChannels.fm Changelog";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:32:"https://openchannels.fm/?p=97751";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"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://openchannels.fm/version-6-0-openchannels-fm-changelog/";s: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:50:"An update to our changelog for OpenChannels.fm 6.0";s: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, 07 Jun 2025 10:19:32 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"BobWP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:38;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:51:"Jonathan Desrosiers: The Impact of Open Source Work";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:38:"https://jonathandesrosiers.com/?p=4976";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"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://jonathandesrosiers.com/2025/06/the-impact-of-open-source-work/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:8423:"<hr class="is-style-wide wp-block-separator has-alpha-channel-opacity" />



<p class="has-small-font-size"><em>June 9, 2025: The YouTube embed at the end of this post was  hanged to the upload of the specific talk mentioned instead of the Day 1 &#8211; Track 1 live stream.<br />June 10, 2025: The photo credit has been updated to include the photographer&#8217;s name and linking to the source instead of Twitter.</em></p>



<hr class="is-style-wide wp-block-separator has-alpha-channel-opacity" />



<p class="">There’s been growing debate recently about whether <a href="https://central.wordcamp.org/">WordCamps</a> have lost their value and relevance. Some argue that attendees rarely share meaningful takeaways afterward, and question whether the talks are impactful enough to provide real learning. They suggest that many people attend only for the travel, social events, and parties. While there may be some truth to these points for certain individuals, I don’t believe this is a fair or accurate generalization.</p>



<p class="">There are certainly <a href="https://jonathandesrosiers.com/2024/11/the-state-of-the-badge/">areas where WordCamps could improve</a>. But there are also aspects that stand out as exceptional. They bring together people from around the world and across all walks of life. They celebrate the <a href="https://www.gnu.org/licenses/quick-guide-gplv3.html">four freedoms of the GPL</a> and the core ideals that make open source meaningful. And they use the opportunity of being together in person to rally around the shared mission of <a href="https://wordpress.org/about/">democratizing publishing</a>.</p>



<p class="">But like anything in life, these events are only as good the mindset you approach them with.</p>



<h2 class="wp-block-heading" id="h-meaningful-impact-of-open-source-software">Meaningful Impact of Open Source Software</h2>



<p class="">Yesterday’s keynote at <a href="https://europe.wordcamp.org/2025/">WordCamp Europe</a> struck a deep chord with me. In <em><a href="https://europe.wordcamp.org/2025/session/wordpress-without-borders-the-fight-for-digital-freedom/">WordPress without Borders — The Fight for Digital Freedom</a></em>, <a href="https://www.noeltock.com/">Noel Tock</a> spoke about his personal experiences in war-torn Ukraine. Through his non-profit, <a href="https://dog-help-kharkiv.org/">Dog Help Kharkiv</a>, he works to evacuate dogs from the frontlines before finding them safe, loving homes.</p>



<figure class="wp-block-image alignwide size-large wp-lightbox-container"><img alt="Noel Tock on stage at WordCamp Europe. He's wearing a black hooded sweatshirt and is holding a remote control." class="wp-image-5019 not-transparent" height="683" src="https://jonathandesrosiers.com/wp-content/uploads/2025/06/noel-tock-wordcamp-europe-2025-1024x683.jpg" width="1024" /><button class="lightbox-trigger" type="button">
			<svg fill="none" height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg">
				<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">
			</svg>
		</button><figcaption class="wp-element-caption">Photo credit: <a href="https://www.flickr.com/photos/wceu/54571046049/in/album-72177720326409156/">Paco Marchante</a>, WordCamp Europe 2025 volunteer photographer.</figcaption></figure>



<p class="">He witnessed how the open web enables life-changing work first-hand. Ukranian organizations are <a href="https://www.saveukraineua.org/">reuniting families</a> or <a href="https://east-sos.org/en/">literally</a> <a href="https://www.repair-together.com/home/">changing</a> <a href="https://www.caritas.org/">and</a> <a href="https://toukrainewithlove.org/">saving</a> <a href="https://superhumans.com/">lives</a>. These initiatives were made possible thanks in part to the work we all do building and maintaining the WordPress software powering tens of millions of websites.</p>



<p class="">What a powerful reality made possible by the <a href="https://ma.tt/2014/01/four-freedoms/">ideals of Open Source</a>.</p>



<h2 class="wp-block-heading" id="h-sharing-our-stories">Sharing Our Stories</h2>



<p class="">While stories at the severe end of the spectrum like these are (hopefully) rare, there’s no shortage of instances where the impact of the software we maintain is life changing. But why is it so hard to find them? It&#8217;s not because they don’t exist. The people living these stories are just busy doing the actual work: fundraising, helping others, managing the demands of everyday life, and running their businesses.</p>



<p class="">WordCamps are more than just conferences. They are moments of connection, reflection, and renewal for a global community working toward something bigger than ourselves. The value is not always in the slides or the swag, but in the relationships formed, the perspectives expanded, and the stories shared. But they&#8217;re also an opportunity to share our own stories.</p>



<p class="">If we want WordCamps to improve, we have to show up with purpose. Attend the talks, ask thoughtful questions, introduce yourself to someone new, and share what you learn. Most importantly, we need to be more intentional about sharing the stories that matter.</p>



<figure class="wp-block-image size-large wp-lightbox-container"><img alt="A person standing at a microphone in front of a stage asking a question. A person is visible but out of focus in the background." class="wp-image-5020 not-transparent" height="683" src="https://jonathandesrosiers.com/wp-content/uploads/2025/06/299677c4502451b71.58467430-scaled-1-1024x683.jpg" width="1024" /><button class="lightbox-trigger" type="button">
			<svg fill="none" height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg">
				<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">
			</svg>
		</button><figcaption class="wp-element-caption"><a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a> licensed <a href="https://wordpress.org/photos/photo/299677c450/">photo</a> by <a href="https://www.nilovelez.com/">Nilo Velez</a> from the <a href="https://wordpress.org/photos/">WordPress Photo Directory</a>.</figcaption></figure>



<p class="">When we tell stories about a simple blog that helps reunite a family, or a one-page fundraising site that powers a grassroots rescue effort, we remind ourselves why this work is meaningful. These are not outliers. WordPress is designed to be stable, extensible, and accessible so that anyone can build with confidence. And what they build can change lives.</p>



<p class="">To make WordCamps better, we must make space for stories like these. Seek them out, listen to them, and share them. When we do, we not only rediscover purpose in our work, we also learn from the people who use what we build. But we don’t have to wait for a WordCamp to do this. Reach out. Tell <a href="https://jonathandesrosiers.com/2017/03/why-i-wordcamp-a-reflection/">someone how their work has impacted your community, your family, or your life</a>.</p>



<p class="">As I <a href="https://jonathandesrosiers.com/2025/06/how-a-core-committer-thinks-making-decisions-for-millions/">highlighted in the talk I gave yesterday</a>, every line matters.</p>



<h2 class="wp-block-heading" id="h-watch-the-replay">Watch the Replay</h2>



<figure class="wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube"><div class="wp-block-embed__wrapper">

</div></figure>



<p class="has-text-align-right"><em>Featured image credit: <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a> licensed <a href="https://wordpress.org/photos/photo/91461e729c/">photo</a> by <a href="https://nomad.blog">annezazu</a> from the <a href="https://wordpress.org/photos/">WordPress Photo Directory</a>.</em></p>
<p>The post <a href="https://jonathandesrosiers.com/2025/06/the-impact-of-open-source-work/">The Impact of Open Source Work</a> appeared first on <a href="https://jonathandesrosiers.com">Jonathan Desrosiers</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:"Sat, 07 Jun 2025 08:45:03 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:19:"Jonathan Desrosiers";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:39;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a: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:"Open Channels FM: Rebrand: Do the Woo Podcast Is Still Here";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:32:"https://openchannels.fm/?p=97887";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:65:"https://openchannels.fm/rebrand-do-the-woo-podcast-is-still-here/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:166:"BobWP updates listeners on the evolution of "Do the Woo," a podcast focused on WooCommerce. It features diverse hosts and segments, catering to all experience 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:"Sat, 07 Jun 2025 06:30:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"BobWP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:40;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a: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:79:"Jonathan Desrosiers: How a Core Committer Thinks: Making Decisions for Millions";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:38:"https://jonathandesrosiers.com/?p=4970";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:97:"https://jonathandesrosiers.com/2025/06/how-a-core-committer-thinks-making-decisions-for-millions/";s: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:3247:"<p class="">I just left the stage in Basel after giving my talk at <a href="https://jonathandesrosiers.com/2025/04/speaking-at-wordcamp-europe-2025/">WordCamp Europe</a>. I am really happy with how it turned out, and I hope others found it insightful. There are some points that have stuck with me that I plan to dive into a bit deeper here on my blog in the coming weeks.</p>



<h2 class="wp-block-heading" id="h-further-reading">Further Reading</h2>



<p class="">In my session, I covered how the WordPress philosophies and other Open Source decision making frameworks apply to evaluating suggested changes as a Core Committer. If you found yourself wanting to learn more, the philosophies of the WordPress project are largely adapted <a href="https://ometer.com/features.html" rel="nofollow">from some</a> <a href="https://ometer.com/free-software-ui.html">essays</a> by <a href="https://en.wikipedia.org/wiki/Havoc_Pennington">Havoc Pennington</a>.</p>



<p class="">These concepts are also detailed in <em><a href="https://producingoss.com/">Producing Open Source Software: How to Run a Successful Free Software Project</a></em> by <a href="https://www.red-bean.com/kfogel/">Karl Fogel</a>. My talk submissions are sometimes a way to promote exploring a subject that I am interested in more deeply. While I use the concepts in this talk at depth every time I work on WordPress, this was definitely one of those cases (<a href="https://amzn.to/4jC38Oc" rel="sponsored nofollow">I&#8217;ve had the paperback version</a> of Fogel&#8217;s book on my desk for longer than I&#8217;d like to admit).</p>



<p class="">WordPress Lead Developer Andrew Nacin also expanded on the topic a bit in his <em><a href="https://nacin.com/2014/02/07/how-wordpress-chooses-committers/">The qualities of a great WordPress contributor</a></em> post on his blog.</p>



<h2 class="wp-block-heading" id="h-watch-the-replay">Watch the Replay</h2>



<p class="">If you missed my talk live, you can watch the replay of the live stream. I’ve included it below and set the video to start when I took the stage. </p>



<figure class="wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube"><div class="wp-block-embed__wrapper">

</div></figure>



<h2 class="wp-block-heading" id="h-slide-deck">Slide Deck</h2>



<p class="">And here&#8217;s my slide deck if you wish to follow along.</p>



<div class="wp-block-file"><a href="https://jonathandesrosiers.com/wp-content/uploads/2025/06/How-a-WordPress-Core-Committer-Thinks-Making-Decisions-for-Millions-WCEU.pdf" id="wp-block-file--media-688a1d9c-604d-4262-88f5-7e116d4d6500">How-a-WordPress-Core-Committer-Thinks-Making-Decisions-for-Millions-WCEU</a><a class="wp-block-file__button wp-element-button" href="https://jonathandesrosiers.com/wp-content/uploads/2025/06/How-a-WordPress-Core-Committer-Thinks-Making-Decisions-for-Millions-WCEU.pdf">Download</a></div>



<p class=""></p>
<p>The post <a href="https://jonathandesrosiers.com/2025/06/how-a-core-committer-thinks-making-decisions-for-millions/">How a Core Committer Thinks: Making Decisions for Millions</a> appeared first on <a href="https://jonathandesrosiers.com">Jonathan Desrosiers</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:"Fri, 06 Jun 2025 16:21:02 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:19:"Jonathan Desrosiers";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:41;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a: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:"Open Channels FM: Press Release: Do the Woo Rebrands to OpenChannels.fm";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:32:"https://openchannels.fm/?p=97748";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:77:"https://openchannels.fm/press-release-do-the-woo-rebrands-to-openchannels-fm/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:202:"Do the Woo has rebranded as OpenChannels.fm, expanding its podcast community to cover various aspects of the open web, while still celebrating WooCommerce as a core focus. It's all about diverse voices.";s: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, 06 Jun 2025 08:55:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"BobWP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:42;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:64:"Open Channels FM: The Rebrand: Do the Woo is now OpenChannels.fm";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:32:"https://openchannels.fm/?p=97880";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"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://openchannels.fm/the-rebrand-do-the-woo-is-now-openchannels-fm/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:210:"So, the podcast "Do the Woo" is now "OpenChannels.fm"! It’s a cool rebrand to reflect their broader focus on WordPress and open web topics, while still keeping the WooCommerce content. Exciting changes ahead.";s: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, 06 Jun 2025 06:00:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"BobWP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:43;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:58:"Weston Ruter: Eliminating Layout Shifts in the Video Block";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:33:"https://weston.ruter.net/?p=34930";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:81:"https://weston.ruter.net/2025/06/05/eliminating-layout-shifts-in-the-video-block/";s: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:35090:"<p>Like the rest of the internet, I&#8217;ve been awestruck by the quality of Google&#8217;s <a href="https://deepmind.google/models/veo/">Veo 3</a> AI video generator (even with audio). As you&#8217;ve seen from my posts, the <a href="https://en.wikipedia.org/wiki/American_bison">American bison</a> <img alt="🦬" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f9ac.png" style="height: 1em;" /> is my favorite animal (aside from my cat of course). Also, perhaps I&#8217;ve watched too many <a href="https://www.instagram.com/moustache_farmer/">videos</a> from the <a href="https://www.moustache-farmer.de/en">Mustache Farmer</a>, but I realized I could use Veo 3 to realize a fantasy of being able to pal around with what in reality is a wild animal. Generating bison videos brought me a lot of joy so I had to share them. However, I faced a dilemma because I didn&#8217;t want to do so via WordPress&#8217;s Video block in its current state: it suffers from a bad case of <em>layout shiftitus</em>. Since web performance is an even greater passion of mine than the bison, before I could share the videos I did a deep dive on the problem and came up with a fix. <em>(Skip to the <a href="https://weston.ruter.net/category/wordpress/feed/#videos">videos</a> below if you don&#8217;t care.)</em></p>



<p>There&#8217;s a 2-year old Gutenberg issue (<a href="https://github.com/WordPress/gutenberg/issues/52185" title="Video block: Should have width height dimensions to prevent cumulative layout shift (CLS)">#52185</a>) which reported the underlying problem here that the Video block should have <code>width</code> and <code>height</code> attributes added to prevent layout shifts. Such jank causes a poor user experience and negatively impacts the <a href="https://web.dev/articles/cls">Cumulative Layout Shift</a> (CLS) metric of <a href="https://web.dev/articles/vitals">Core Web Vitals</a> (CWV).</p>



<p>A dimensionless <code>video</code> element gets a 2:1 aspect ratio placeholder (a 300&#215;150 <a href="https://html.spec.whatwg.org/multipage/media.html#the-video-element:default-object-size">default object size</a>) until the video&#8217;s metadata is loaded, at which time a layout shift happens due to the new dimensions being applied. When there&#8217;s a <code>poster</code> attribute, the placeholder dimensions get replaced with the dimensions of the poster image once it loads, also resulting in a layout shift; lastly, if the poster image doesn&#8217;t have the exact same dimensions as the video, then a second layout shift occurs once the video starts playing.</p>



<p>Take a look at these screen recordings of a Video block without a poster and then with a poster provided (and there&#8217;s a script on this test page that starts video playback after 4 seconds):</p>



<div class="wp-block-columns is-not-stacked-on-mobile is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex" id="screen-recordings-with-layout-shifts">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-video"><video controls="controls" height="1080" loop="loop" src="https://weston.ruter.net/wp-content/uploads/2025/06/1-no-poster-layout-shift.mp4" width="476"></video><figcaption class="wp-element-caption">Without a poster, causing a layout shift.</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-video"><video controls="controls" height="1080" loop="loop" src="https://weston.ruter.net/wp-content/uploads/2025/06/2-with-poster-layout-shift.mp4" width="476"></video><figcaption class="wp-element-caption">With a poster, causing a layout shift.</figcaption></figure>
</div>
</div>



<p>The layout shifts are somewhat exaggerated here because:</p>



<ol class="wp-block-list">
<li>A vertical/portrait video is used.</li>



<li>A network delay is added to slow down the loading of the poster and video (which is not unexpected on a mobile connection).</li>



<li>The poster image doesn&#8217;t have the same dimensions as the video.</li>
</ol>



<p>In any case, such layout shifts seem to occur anywhere the Video block is used to some degree. </p>



<h2 class="wp-block-heading">CLS Passing Rates</h2>



<p>Layout shifts from the Video block contribute to WordPress overall having a relatively poor passing rate for CLS. On desktop, 71% of WordPress origins have a good CLS passing rate, while on mobile the passing rate is 82%. (CLS is worse on desktop presumably because more content is on the screen at a time, meaning there are more opportunities for layout shifts to appear in the viewport.) When evaluating these CLS passing rates in terms of <a href="https://en.wikipedia.org/wiki/Academic_grading_in_the_United_States#Grade_conversion">academic letter grades</a>, <strong>WordPress is getting a B− on mobile and a C− on desktop.</strong> When comparing WordPress to other popular CMS platforms, it ranks near the bottom with only Joomla performing worse, as seen in this table sorted by desktop:</p>



<figure class="wp-block-table is-style-regular has-medium-font-size"><table><thead><tr><th>Technology</th><th><a href="https://httparchive.org/reports/techreport/tech?good-cwv-over-time=CLS&amp;client=desktop&amp;tech=ALL%2CWordPress%2CShopify%2CWix%2CSquarespace%2CJoomla%2CDrupal&amp;geo=ALL&amp;rank=ALL#comparison-good-cwvs">Desktop</a></th><th><a href="https://httparchive.org/reports/techreport/tech?good-cwv-over-time=CLS&amp;client=mobile&amp;tech=ALL%2CWordPress%2CShopify%2CWix%2CSquarespace%2CJoomla%2CDrupal&amp;geo=ALL&amp;rank=ALL#comparison-good-cwvs">Mobile</a></th></tr></thead><tbody><tr><td>Wix</td><td>91% (A−)</td><td>94% (A)</td></tr><tr><td>Shopify</td><td>82% (B−)</td><td>90% (A−)</td></tr><tr><td>Squarespace</td><td>77% (C+)</td><td>88% (B+)</td></tr><tr><td>Drupal</td><td>72% (C−)</td><td>85% (B)</td></tr><tr><td><em>(Any)</em></td><td>72% (C−)</td><td>79% (C+)</td></tr><tr><td><strong>WordPress</strong></td><td><strong>71%</strong> (C−)</td><td><strong>82%</strong> (B−)</td></tr><tr><td>Joomla</td><td>69% (D+)</td><td>79% (C+)</td></tr></tbody></table></figure>



<details class="wp-block-details has-small-font-size is-layout-flow wp-block-details-is-layout-flow">Graphs of origins with good CLS over time
<div class="wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-0884d4d2 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="has-text-align-center">Desktop</p>



<figure class="wp-block-image aligncenter size-large is-resized wp-lightbox-container" style="margin-top: 0;"><img alt="Graph showing good CLS over time on desktop for WordPress, Shopify, Wix, Squarespace, Joomla, and Drupal. All platforms are trending upward, but WordPress is near the bottom with Joomla at ~70%, while Wix is at the top with ~90%." class="wp-image-35018" height="600" src="https://weston.ruter.net/wp-content/uploads/2025/06/chart-cls-desktop-svgomg.svg" style="width: 600px; height: auto;" width="600" /><button class="lightbox-trigger" type="button">
			<svg fill="none" height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg">
				<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">
			</svg>
		</button></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="has-text-align-center">Mobile</p>



<figure class="wp-block-image aligncenter size-large is-resized wp-lightbox-container" style="margin-top: 0;"><img alt="Graph showing good CLS over time on mobile for WordPress, Shopify, Wix, Squarespace, Joomla, and Drupal. All platforms are trending upward, but WordPress is near the bottom with Joomla at ~80%, while Wix is at the top with ~95%." class="wp-image-35019" height="600" src="https://weston.ruter.net/wp-content/uploads/2025/06/chart-cls-mobile-svgomg.svg" style="width: 600px; height: auto;" width="600" /><button class="lightbox-trigger" type="button">
			<svg fill="none" height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg">
				<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">
			</svg>
		</button></figure>
</div>
</div>
</details>



<p>The passing rates for WordPress are unsurprisingly very close to the passing rates for the web overall (any technology) since WordPress has the largest market share by far. <strong>Whenever WordPress performs badly, the web as a whole suffers. Whenever WordPress performs well, the web as a whole improves.</strong> This was the drive behind my “scaled activation” Chrome team at Google <a href="https://weston.ruter.net/2025/05/14/a-decade-as-a-core-committer-my-wordpress-contribution-history/">when I was sponsored</a> there to work on WordPress performance full time.</p>



<p>Now, CLS in WordPress is not nearly as problematic as Largest Contentful Paint (LCP), which is getting an <strong>F grade</strong> for its passing rates of <a href="https://httparchive.org/reports/techreport/tech?good-cwv-over-time=LCP&amp;client=mobile&amp;tech=ALL%2CWordPress%2CShopify%2CWix%2CSquarespace%2CJoomla%2CDrupal&amp;geo=ALL&amp;rank=ALL#comparison-good-cwvs">54% on mobile</a> and <a href="https://httparchive.org/reports/techreport/tech?good-cwv-over-time=LCP&amp;client=desktop&amp;tech=ALL%2CWordPress%2CShopify%2CWix%2CSquarespace%2CJoomla%2CDrupal&amp;geo=ALL&amp;rank=ALL#comparison-good-cwvs">65% on desktop</a>. Because of this, improving LCP has been the primary focus for us on the WordPress Core Performance Team, and the <a href="https://make.wordpress.org/core/2023/09/19/analyzing-the-core-web-vitals-performance-impact-of-wordpress-6-3-in-the-field/">metric has improved</a> thanks in part to <a href="https://make.wordpress.org/core/2023/07/13/image-performance-enhancements-in-wordpress-6-3/">adding</a> <code>fetchpriority=high</code> to LCP-probable <code>img</code> tags, <a href="https://make.wordpress.org/core/2023/07/13/image-performance-enhancements-in-wordpress-6-3/#:~:text=Lazy%2Dloading%20issues%20addressed">adjusting</a> image lazy-loading heuristics, <a href="https://core.trac.wordpress.org/ticket/58472">optimizing</a> the emoji loader, and most recently landing <a href="https://make.wordpress.org/core/2025/03/06/speculative-loading-in-6-8/">Speculative Loading</a>. And work continues on improving LCP, for example, by <a href="https://weston.ruter.net/2025/05/26/improve-lcp-by-deprioritizing-interactivity-api-script-modules/">deprioritizing non-critical scripts</a> and by leveraging client-side metrics to more accurately prioritize images via the <a href="https://github.com/WordPress/performance/blob/trunk/plugins/optimization-detective/docs/introduction.md">Optimization Detective</a> project (see also <a href="https://weston.ruter.net/2025/02/21/boosting-performance-with-optimization-detective/">my talk</a>).</p>



<p>The other CWV metric, Interaction to Next Paint (INP), is in relatively great shape with a passing rate of <a href="https://httparchive.org/reports/techreport/tech?good-cwv-over-time=INP&amp;client=mobile&amp;tech=ALL%2CWordPress%2CShopify%2CWix%2CSquarespace%2CJoomla%2CDrupal&amp;geo=ALL&amp;rank=ALL#comparison-good-cwvs">85% on mobile</a> (B) and <a href="https://httparchive.org/reports/techreport/tech?good-cwv-over-time=INP&amp;client=desktop&amp;tech=ALL%2CWordPress%2CShopify%2CWix%2CSquarespace%2CJoomla%2CDrupal&amp;geo=ALL&amp;rank=ALL#comparison-good-cwvs">98% on desktop</a> (A+).</p>



<p>So, in parallel with the continued work to improve LCP, it&#8217;s important to not neglect WordPress&#8217;s sub-optimal CLS passing rate. Prior work to improve CLS included <a href="https://make.wordpress.org/core/2020/07/14/lazy-loading-images-in-5-5/">adding</a> <code>width</code> and <code>height</code> attributes to <code>img</code> tags for the sake of lazy-loading. There&#8217;s also a ticket (<a href="https://core.trac.wordpress.org/ticket/59119" title="Measure layout stability metrics in performance tests">#59119</a>) to measure CLS in performance tests. Additionally, a key feature of the <a href="https://wordpress.org/plugins/embed-optimizer/">Embed Optimizer</a> extension to the aforementioned Optimization Detective <a href="https://wordpress.org/plugins/optimization-detective/">plugin</a> is the <strong>reduction of layout shifts</strong> caused by embeds that resize when they load. This is commonly seen in embeds for Twitter, Bluesky, and WordPress itself. Embed Optimizer keeps track of these embeds&#8217; resized heights. Then, with these resized heights stored, Embed Optimizer sets the appropriate height on the container <code>figure</code> element as the viewport-specific <code>min-height</code> so that when the embed loads any layout shift is minimized.</p>



<p>Lastly, coming back to the impetus of this post, there&#8217;s the issue of layout shifts in the Video block.</p>



<h2 class="wp-block-heading">Fixing the Video Block</h2>



<p>Preventing layout shifts in the Video block is straightforward. As described in the <a href="https://github.com/WordPress/gutenberg/issues/52185">Gutenberg issue</a>, the <code>width</code> and <code>height</code> attributes need to be supplied on the <code>video</code> tag, although a bit more is needed than just that. When a video is uploaded to the Media Library, the metadata is <a href="https://developer.wordpress.org/reference/functions/wp_generate_attachment_metadata/">obtained</a> via the <code><a href="https://developer.wordpress.org/reference/functions/wp_read_video_metadata/">wp_read_video_metadata()</a></code> function, including its width and height. Assuming that reading the metadata was successful, these dimensions can then be injected into the <code>video</code> tag in the same way as dimensions are being <a href="https://developer.wordpress.org/reference/functions/wp_img_tag_add_width_and_height_attr/">added</a> to the <code>img</code> tag. (For external videos added by URL not uploaded into the Media Library, the dimensions could be read client-side in the block editor or they could be <a href="https://github.com/WordPress/performance/issues/10#issuecomment-2601037707">gathered via Optimization Detective on the frontend</a>.)</p>



<p>This goes full circle for me because we did something similar in <time datetime="2018-05-21">2018 (7 years ago!)</time> to <a href="https://github.com/ampproject/amp-wp/pull/1026">add dimensions to videos</a> in the <a href="https://wordpress.org/plugins/amp/">AMP plugin</a> when converting from the <code>video</code> tag to the <code><a href="https://amp.dev/documentation/components/amp-video">amp-video</a></code> component. The <a href="https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml">AMP HTML spec</a> <a href="https://amp.dev/documentation/guides-and-tutorials/learn/amp-html-layout/#width-and-height">mandates</a> (generally) that all elements must have dimensions supplied to <a href="https://blog.amp.dev/2020/04/16/cumulative-layout-shift-in-amp/">prevent layout shifts</a>, as the first of <a href="https://amp.dev/about/mission-and-vision#:~:text=merchant%2C%20and%20advertiser.-,Design%20Principles,-These%20design%20principles">AMP&#8217;s design principles</a> is to prioritize the user experience. As I <a href="https://weston.ruter.net/2025/05/14/a-decade-as-a-core-committer-my-wordpress-contribution-history/#:~:text=Ultimately%2C%20a%20lot,improving%20CWV%20metrics.">mentioned</a> in my recent <a href="https://weston.ruter.net/2025/05/14/a-decade-as-a-core-committer-my-wordpress-contribution-history/">contribution retrospective</a>, AMP predates CWV; as part of <a href="https://blog.amp.dev/2019/05/21/contributing-back-lessons-learned-part-1/">contributing back lessons learned from AMP to the whole web</a>, it “invested in defining additional metrics that would paint a more holistic image of user perceived performance.” This included a “Layout Stability” metric which came to be known as CLS.</p>



<p>In addition to providing the <code>width</code> and <code>height</code> attributes, for the <code>video</code> to scale to fit its container and to have the correct aspect ratio, the element needs to be styled with <code>height:auto</code> since it has <code>width:100%</code>. Finally, because of an <a href="https://github.com/w3c/csswg-drafts/issues/7524" title="[css-sizing-4] aspect-ratio via width and height attributes doesn't work for &lt;video&gt;">issue</a> in the CSS spec (as <a href="https://jakearchibald.com/2022/img-aspect-ratio/#:~:text=Update%3A%20Although%20browsers%20implemented%20the%20feature%20for%20%3Cvideo%3E%20as%20per%20the%20spec%2C%20the%20spec%20is%20broken%2C%20so%20it%20doesn%27t%20work%20in%20practice.">highlighted</a> by <a href="https://jakearchibald.com/">Jake Archibald</a>), the width and height need to be replicated in an <code><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio">aspect-ratio</a></code> style. This currently has to be added as an inline style since the following desired use of the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/attr"><code>attr()</code></a> function in a style rule is currently only <a href="https://caniuse.com/css3-attr">supported</a> in Chromium:</p>


<pre class="wp-block-code has-medium-font-size"><span><code class="hljs language-css"><span class="hljs-selector-class">.wp-block-video</span> <span class="hljs-selector-tag">video</span><span class="hljs-selector-attr">&#91;width]</span><span class="hljs-selector-attr">&#91;height]</span> {
	<span class="hljs-attribute">aspect-ratio</span>:
		<span class="hljs-built_in">attr</span>(width  type(&lt;number&gt;)) /
		<span class="hljs-built_in">attr</span>(height type(&lt;number&gt;));
}</code></span></pre>


<p>I&#8217;ve submitted the fix in Gutenberg pull request #70293: <a href="https://github.com/WordPress/gutenberg/pull/70293">Fix layout shift caused by video tag in Video block lacking width and height</a>.</p>



<p>And since I didn&#8217;t want to wait for that fix to be merged and available in a new Gutenberg release, I also adapted it into a standalone <a href="https://github.com/westonruter/layout-stabilized-video-block">Layout-stabilized Video Block</a> plugin which is active here on my blog (since I wanted to share those AI-generated bison videos!). Please install the plugin on your site and test how it works with your Video blocks.</p>



<p>Compare the <a href="https://weston.ruter.net/category/wordpress/feed/#screen-recordings-with-layout-shifts">above screen recordings</a> of layout-shifting Video blocks with the following screen recordings where the fix is applied:</p>



<div class="wp-block-columns is-not-stacked-on-mobile is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex" id="screen-recordings-without-layout-shifts">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-video"><video controls="controls" height="1080" loop="loop" src="https://weston.ruter.net/wp-content/uploads/2025/06/3-no-poster-and-no-layout-shift.mp4" width="476"></video><figcaption class="wp-element-caption">Without a poster, not causing a layout shift.</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-video"><video controls="controls" height="1080" loop="loop" src="https://weston.ruter.net/wp-content/uploads/2025/06/4-with-poster-and-no-layout-shift.mp4" width="476"></video><figcaption class="wp-element-caption">With a poster, not causing a layout shift.</figcaption></figure>
</div>
</div>



<details class="wp-block-details has-small-font-size is-layout-flow wp-block-details-is-layout-flow">Aside: Command used for transcoding screen recordings
<p>I was really impressed with how well FFmpeg compressed the original Quicktime screen recordings from ~32MB down to just ~400KB, and since the args to <code>ffmpeg</code> are always something I have to re-discover, here&#8217;s the command for (my) future reference:</p>


<pre class="wp-block-code"><span><code class="hljs language-bash"><span class="hljs-keyword">for</span> video <span class="hljs-keyword">in</span> $(ls *.mov); <span class="hljs-keyword">do</span>
  ffmpeg 
    -i <span class="hljs-string">"<span class="hljs-variable">$video</span>"</span> \
    -vf <span class="hljs-string">"scale=-2:1080"</span> \
    -c:v libx264 \
    -preset medium \
    -crf 30 \
    -an \
    -b:a 128k \
    -movflags \
    +faststart \
    <span class="hljs-string">"<span class="hljs-variable">${video/.mov/.mp4}</span>"</span>
<span class="hljs-keyword">done</span></code></span></pre></details>



<p>You can <a href="https://weston.ruter.net/?p=34930&amp;disable_layout_stabilized_video_block=1#screen-recordings-without-layout-shifts">try loading this post without the fix</a> by adding a special query var to the URL (and then keep hard reloading to see more layout instability).</p>



<p>And now, with the layout shift fixed, let&#8217;s get to the bison videos.</p>



<h2 class="wp-block-heading" id="videos">AI Bison Videos</h2>



<p>The following Veo-generated videos were downloaded from Gemini and uploaded without any transcoding, although they are encoded quite well for the web at ~3MB each for 8 seconds of high quality 720p video with audio. I manually selected a representative frame of each video to create the poster images.</p>



<aside class="wp-block-group is-style-section-1 has-global-padding is-layout-constrained wp-container-core-group-is-layout-c385debf wp-block-group-is-layout-constrained is-style-section-1--1">
<p class="is-style-default">Bonus: This site is running the <a href="https://wordpress.org/plugins/image-prioritizer/">Image Prioritizer</a> extension of Optimization Detective which improves the loading of videos by:</p>



<ol class="wp-block-list">
<li>Lazy loading the videos by setting the <code>preload</code> initially to <code>none</code>, and then removing this when the video enters the viewport.</li>



<li>Lazy loading the poster images.</li>



<li>Reducing the size of the poster image according to the max width of the <code>video</code> across all viewport sizes.</li>



<li>Preloading poster images for LCP <code>video</code> elements (not relevant for this post).</li>
</ol>
</aside>



<p>This first video leans a little too hard into the “mustache” of the Mustache Farmer:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Video_Ready_Bison_and_Man.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Video_Ready_Bison_and_Man.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison falls asleep in the lap of a man in the style of the Mustache Farmer.</figcaption></figure>



<p>I like how this guy seemingly pretends he didn&#8217;t know where the bison was in the open field, “Oh, there you are buddy!”:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Nuzzles_Man_Video_Ready.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Nuzzles_Man_Video_Ready.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison runs over to a man and affectionately nuzzles him, putting his head next to the man to rub up against him. The man pets the bison&#8217;s head and smiles. The bison is the man&#8217;s pet.</figcaption></figure>



<p>Awkward running:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Nuzzles_Petting_Man_Video.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Nuzzles_Petting_Man_Video.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison and a man run toward each other. When they meet, the bison affectionately nuzzles him, putting his head next to the man to rub up against him. The man pets the bison&#8217;s head and smiles. The bison is the man&#8217;s pet.</figcaption></figure>



<p>A somewhat less awkward run:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_and_Man_s_Affectionate_Meeting.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_and_Man_s_Affectionate_Meeting.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison and a man run toward each other. When they meet, the bison affectionately nuzzles him, putting his head next to the man to rub up against him. The man pets the bison&#8217;s head and smiles. The bison is the man&#8217;s pet.</figcaption></figure>



<p>There&#8217;s an invisible stirrup in this one:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Ride_Video_Ready.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Ride_Video_Ready.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison kneels down for a man, and the man climbs on the back of the bison and they gallop off into the sunset.</figcaption></figure>



<p>Apparently Tom Cruise with maniacal laughter and a magically-appearing saddle:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Ride_Video_Ready_.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Ride_Video_Ready_.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison kneels down for a man to mount on top of the bison. The bison wants to give the man a ride. The man laughs and smiles as he climbs onto the back of the bison and they gallop off into the sunset.</figcaption></figure>



<p>Just heartwarming:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_and_Man_s_Affectionate_Moment.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_and_Man_s_Affectionate_Moment.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison walks up to a man. The bison rubs his head against the man, nuzzling him like a cat. The man affectionately rubs the bison&#8217;s head. The man smiles. The bison could be the man&#8217;s pet.</figcaption></figure>



<p>The guy&#8217;s smile is a little intense in this one, but it&#8217;s also heartwarming:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Video_of_Man_and_Bison.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Video_of_Man_and_Bison.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A man and a bison having fun together, rolling in the grass and wrestling. The bison is the man&#8217;s pet.</figcaption></figure>



<p>This guy seems a little fake (almost like he&#8217;s AI):</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Petting_Video_Ready_.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Bison_Petting_Video_Ready_.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison is standing close to a man. The man scratches the bison under its neck and he pets the hair on the bison&#8217;s head. The bison is enjoying the affection. The man smiles and tells the bison, &#8220;You&#8217;re such a good boy.&#8221; The bison likes the man. The bison is the man&#8217;s pet.</figcaption></figure>



<p>Nice purring sound effect, followed by flapping bird wings?</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Cat_and_Bison_Video_Link.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Cat_and_Bison_Video_Link.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A gray tabby cat with faint stripes jumps on top of a bison and starts to knead its paws into the bison&#8217;s thick fur. The bison likes it. The bison and the cat are friends.</figcaption></figure>



<p>Cozy, but the cat glitches a bit at the end:</p>



<figure class="wp-block-video"><video controls="controls" height="720" poster="https://weston.ruter.net/wp-content/uploads/2025/06/Video_Bison_and_Cat_Nap.jpg" src="https://weston.ruter.net/wp-content/uploads/2025/06/Video_Bison_and_Cat_Nap.mp4" width="1280"></video><figcaption class="wp-element-caption">Prompt: A bison is lying down in the grass. A gray tabby cat nuzzles up to the bison and climbs on its back to lie down for a nap. The bison likes the cat&#8217;s company.</figcaption></figure>



<p>Now I&#8217;m going to go pet my real cat. <img alt="😸" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f638.png" style="height: 1em;" /></p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<p class="has-medium-font-size">Where I&#8217;ve shared this:</p>



<ul class="wp-block-social-links is-layout-flex wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a class="wp-block-social-link-anchor" href="https://www.linkedin.com/posts/westonruter_eliminating-layout-shifts-in-the-video-block-activity-7336504092174729217-HmKO"><svg height="24" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-bluesky  wp-block-social-link"><a class="wp-block-social-link-anchor" href="https://bsky.app/profile/weston.ruter.net/post/3lqvbcqwx622q"><svg height="24" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M6.3,4.2c2.3,1.7,4.8,5.3,5.7,7.2.9-1.9,3.4-5.4,5.7-7.2,1.7-1.3,4.3-2.2,4.3.9s-.4,5.2-.6,5.9c-.7,2.6-3.3,3.2-5.6,2.8,4,.7,5.1,3,2.9,5.3-5,5.2-6.7-2.8-6.7-2.8,0,0-1.7,8-6.7,2.8-2.2-2.3-1.2-4.6,2.9-5.3-2.3.4-4.9-.3-5.6-2.8-.2-.7-.6-5.3-.6-5.9,0-3.1,2.7-2.1,4.3-.9h0Z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Bluesky</span></a></li>

<li class="wp-social-link wp-social-link-mastodon  wp-block-social-link"><a class="wp-block-social-link-anchor" href="https://mastodon.social/@westonruter/114632880406289198"><svg height="24" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z"></svg><span class="wp-block-social-link-label screen-reader-text">Mastodon</span></a></li>

<li class="wp-social-link wp-social-link-twitter  wp-block-social-link"><a class="wp-block-social-link-anchor" href="https://x.com/westonruter/status/1930738990308884546"><svg height="24" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Twitter</span></a></li>

<li class="wp-social-link wp-social-link-threads  wp-block-social-link"><a class="wp-block-social-link-anchor" href="https://www.threads.com/@westonruter/post/DKmwlxgOHzL"><svg height="24" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M16.3 11.3c-.1 0-.2-.1-.2-.1-.1-2.6-1.5-4-3.9-4-1.4 0-2.6.6-3.3 1.7l1.3.9c.5-.8 1.4-1 2-1 .8 0 1.4.2 1.7.7.3.3.5.8.5 1.3-.7-.1-1.4-.2-2.2-.1-2.2.1-3.7 1.4-3.6 3.2 0 .9.5 1.7 1.3 2.2.7.4 1.5.6 2.4.6 1.2-.1 2.1-.5 2.7-1.3.5-.6.8-1.4.9-2.4.6.3 1 .8 1.2 1.3.4.9.4 2.4-.8 3.6-1.1 1.1-2.3 1.5-4.3 1.5-2.1 0-3.8-.7-4.8-2S5.7 14.3 5.7 12c0-2.3.5-4.1 1.5-5.4 1.1-1.3 2.7-2 4.8-2 2.2 0 3.8.7 4.9 2 .5.7.9 1.5 1.2 2.5l1.5-.4c-.3-1.2-.8-2.2-1.5-3.1-1.3-1.7-3.3-2.6-6-2.6-2.6 0-4.7.9-6 2.6C4.9 7.2 4.3 9.3 4.3 12s.6 4.8 1.9 6.4c1.4 1.7 3.4 2.6 6 2.6 2.3 0 4-.6 5.3-2 1.8-1.8 1.7-4 1.1-5.4-.4-.9-1.2-1.7-2.3-2.3zm-4 3.8c-1 .1-2-.4-2-1.3 0-.7.5-1.5 2.1-1.6h.5c.6 0 1.1.1 1.6.2-.2 2.3-1.3 2.7-2.2 2.7z"></svg><span class="wp-block-social-link-label screen-reader-text">Threads</span></a></li></ul>



<p></p>
<p>The post <a href="https://weston.ruter.net/2025/06/05/eliminating-layout-shifts-in-the-video-block/">Eliminating Layout Shifts in the Video Block</a> appeared first on <a href="https://weston.ruter.net">Weston Ruter</a>.</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 05 Jun 2025 21:09:42 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:12:"Weston Ruter";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:44;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:66:"Felix Arntz: Introducing the View Transitions Plugin for WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:30:"https://felix-arntz.me/?p=2122";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:74:"https://felix-arntz.me/blog/introducing-view-transitions-wordpress-plugin/";s: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:16276:"<p>I&#8217;m thrilled to announce a new plugin from the WordPress Core Performance Team: <a href="http://wordpress.org/plugins/view-transitions/" rel="noreferrer noopener" target="_blank">View Transitions</a>! This experimental plugin brings the power of the <a href="https://developer.chrome.com/docs/web-platform/view-transitions/cross-document" rel="noreferrer noopener" target="_blank">cross-document View Transitions browser API</a> to your WordPress site, allowing for smoother, animated transitions between page navigations.</p>



<h2 class="wp-block-heading">View Transitions?</h2>



<p>Traditionally, moving from one page (or, technically, URL) to another on the web has always involved an abrupt, &#8220;hard&#8221; reload. While this might seem completely natural to many of us on the web, user expectations have shifted drastically in the past (almost) two decades.</p>



<p>Native mobile applications, with their seamless in-app navigations and smooth transitions, have set a new bar for user experience. This has led web developers to try to catch up with that experience, often turning to Single Page Applications (SPAs). While SPAs aim to mimic native app navigations by dynamically updating content without full page reloads, this often comes with increased development complexity and a shift in how you structure your entire website, often at the cost of accessibility or performance.</p>



<p>Now, with <a href="https://developer.chrome.com/docs/web-platform/view-transitions/cross-document">cross-document view transitions</a>, you can achieve that desired user experience through smooth transitions on the web without any extensive overhaul of your website. And the new <a href="http://wordpress.org/plugins/view-transitions/">View Transitions</a> plugin makes it super simple in WordPress.</p>



<span id="more-2122"></span>



<h2 class="wp-block-heading">How Do View Transitions Work in WordPress?</h2>



<p>As soon as you have activated the plugin on your WordPress site and navigate between a few pages of your site, you&#8217;ll notice that the plugin implements a gentle fade effect for the transition, creating a more graceful and visually engaging user experience. This is the default behavior not only for the plugin, but also for the View Transitions API in the browser.</p>



<p>If you want to see a live demo &#8211; you&#8217;re on it! The plugin is active on my site, so for example you could click on the &#8220;Blog&#8221; link in the header navigation. You should see a smooth transition if your browser supports it (see further below). Just make sure to navigate back here afterwards to continue reading. 😁</p>



<p>(If you want to test it more, you could navigate to the home page by clicking on the site title, scroll down to &#8220;Latest posts&#8221;, then click on the &#8220;View post&#8221; button for this post. When using a large enough viewport, that transition should expand/morph the small featured image from the post in the grid to the much larger featured image shown above. If the animation is too fast, try clicking the Back/Forward button in your browser a few times to get a better sense of what I&#8217;m referring to.)</p>



<p>Because the nature and style of transitions can be heavily dependent on a theme&#8217;s specific layout and design, the long-term vision is for themes to opt in and customize this behavior. This is facilitated through the WordPress theme support API, for instance by calling <code>add_theme_support( 'view-transitions' )</code>.</p>



<p>For now, since this plugin&#8217;s explicit purpose is to enable and showcase view transitions, it automatically enables them across your site, regardless of the theme currently in use.</p>



<h2 class="wp-block-heading" id="customizing-view-transitions">Customizing View Transitions</h2>



<p>For this initial experimental phase, the plugin offers a user-friendly way to explore different configurations directly within the WordPress admin. You&#8217;ll find settings under <strong>Settings &gt; Reading</strong> that allow you to tweak the view transitions behavior. This UI is primarily for easy exploration and testing at this early stage. Should view transitions make their way into Core, customization would solely be managed through code via the theme support API. That said, even with this early plugin version, themes can already start using the theme support API.</p>



<h3 class="wp-block-heading">Customizing with <code>add_theme_support()</code></h3>



<p>To quickly enable view transitions with standard settings, add the following to your theme&#8217;s <code>functions.php</code> file (typically within the <code>after_setup_theme</code> action hook):</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mytheme_setup</span><span class="hljs-params">()</span> </span>{
	add_theme_support( <span class="hljs-string">'view-transitions'</span> );
}
add_action( <span class="hljs-string">'after_setup_theme'</span>, <span class="hljs-string">'mytheme_setup'</span> );</code></span></pre>


<p>For more control, you can pass an array of arguments to <code>add_theme_support( 'view-transitions', $args )</code>. Here are the available arguments:</p>



<ul class="wp-block-list">
<li><strong><code>default-animation</code></strong>: Specifies the default animation style for transitions.</li>



<li><strong><code>post-selector</code></strong>: CSS selector(s) to identify individual post containers, crucial for applying post-specific transitions from archive/listing pages.</li>



<li><strong><code>global-transition-names</code></strong>: A map (associative array) defining CSS selectors for global elements (like headers or sidebars) and their view transition names that should have persistent <code>view-transition-name</code> values across the entire site.</li>



<li><strong><code>post-transition-names</code></strong>: A map (associative array) defining CSS selectors for elements <em>within</em> post containers (like titles or featured images) and their view transition names that should animate during transitions to/from single views.</li>
</ul>



<p>To provide additional context on what the view transition names are for: Whenever an element has the same view transition name assigned between two URLs that the user navigates between, it will gently morph as part of the transition, maintaining a clear association. For example, a post title in a grid of posts in an archive might scale up in size and move to the top of the page when navigating to its single post URL.</p>



<p>For the <code>default-animation</code>, a few animations are available by default. Additionally, the plugin provides an API to register additional animations, each of which encompasses a unique identifier, some configuration values, a CSS stylesheet, and optional aliases. I&#8217;m not going to cover this here for now since it&#8217;s a more advanced integration, but ideally in the long term there could be plugins or themes that register their own view transition animations that themes could use. For now, a few basic animations are available out of the box, mostly as an example of what can be done. The initial supported identifiers (and their aliases) are:</p>



<ul class="wp-block-list">
<li><code>fade</code></li>



<li><code>slide</code>
<ul class="wp-block-list">
<li><code>slide-from-right</code></li>



<li><code>slide-from-bottom</code></li>



<li><code>slide-from-left</code></li>



<li><code>slide-from-top</code></li>
</ul>
</li>



<li><code>swipe</code>
<ul class="wp-block-list">
<li><code>swipe-from-right</code></li>



<li><code>swipe-from-bottom</code></li>



<li><code>swipe-from-left</code></li>



<li><code>swipe-from-top</code></li>
</ul>
</li>



<li><code>wipe</code>
<ul class="wp-block-list">
<li><code>wipe-from-right</code></li>



<li><code>wipe-from-bottom</code></li>



<li><code>wipe-from-left</code></li>



<li><code>wipe-from-top</code></li>
</ul>
</li>
</ul>



<p>You can customize any or all of the supported arguments by passing an array to <code>add_theme_support()</code>. Here’s an example modifying all available options:</p>


<pre class="wp-block-code alignwide"><span><code class="hljs language-php"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mytheme_custom_view_transitions_setup</span><span class="hljs-params">()</span> </span>{
	add_theme_support( <span class="hljs-string">'view-transitions'</span>, <span class="hljs-keyword">array</span>(
		<span class="hljs-string">'default-animation'</span>       =&gt; <span class="hljs-string">'wipe-from-right'</span>,
		<span class="hljs-string">'post-selector'</span>           =&gt; <span class="hljs-string">'.wp-block-post.post, article.post, article.entry'</span>,
		<span class="hljs-string">'global-transition-names'</span> =&gt; <span class="hljs-keyword">array</span>(
			<span class="hljs-string">'.site-branding'</span> =&gt; <span class="hljs-string">'logo'</span>,
			<span class="hljs-string">'.site-header'</span>   =&gt; <span class="hljs-string">'header'</span>,
        	),
        	<span class="hljs-string">'post-transition-names'</span>   =&gt; <span class="hljs-keyword">array</span>(
			<span class="hljs-comment">// These are mostly just the defaults, but there's one extra entry.</span>
			<span class="hljs-string">'.wp-block-post-title, .entry-title'</span>     =&gt; <span class="hljs-string">'post-title'</span>,
			<span class="hljs-string">'.wp-post-image'</span>                         =&gt; <span class="hljs-string">'post-thumbnail'</span>,
			<span class="hljs-string">'.wp-block-post-content, .entry-content'</span> =&gt; <span class="hljs-string">'post-content'</span>,
			<span class="hljs-string">'.post-meta'</span>                             =&gt; <span class="hljs-string">'post-meta'</span>, <span class="hljs-comment">// Additional entry.</span>
		),
	) );
}
add_action( <span class="hljs-string">'after_setup_theme'</span>, <span class="hljs-string">'mytheme_custom_view_transitions_setup'</span> );</code></span></pre>


<p>As you can see in this example, which also indicates some of the default values, they aim to capture common patterns that work across block themes and classic themes alike. That said, block themes are likely a perfect fit for view transitions, given their more predictable nature in markup due to using exclusively blocks.</p>



<p>The default values for all the supported arguments are based partly on WordPress-generated classes that should almost always be included in WordPress sites, and partly on very common conventions. The goal is that the defaults should work well for the majority of WordPress sites. That said, it is impossible to make it look perfect for every possible WordPress theme. That&#8217;s precisely why the theme support approach was chosen for making View Transitions available in WordPress.</p>



<h3 class="wp-block-heading">Customizing via <em>Settings &gt; Reading</em></h3>



<p>A limited subset of what can be customized via <code>add_theme_support</code> is made available via the &#8220;View Transitions&#8221; settings section under <em>Settings &gt; Reading</em>.</p>



<figure class="wp-block-image size-large"><img alt="Settings section of the View Transitions plugin for WordPress" class="wp-image-2131" height="576" src="https://felix-arntz.me/wp-content/uploads/2025/05/view-transitions-wordpress-settings-1024x576.webp" width="1024" /></figure>



<p>You can customize the default animation, and the selectors for the default view transition names for both global and post-specific elements. While this means the customization options are limited via the UI, it still allows you to play around with different configurations via UI, and likely for the majority of sites these are the most relevant parameters to customize anyways. Keep in mind that this UI is only supplemental, and it only exists for easy exploration in the plugin. The recommended way to customize is via <code>add_theme_support</code> in your site&#8217;s WordPress theme.</p>



<h3 class="wp-block-heading">A Note on Configuration Precedence</h3>



<p>It&#8217;s important to be mindful that, for now, any configurations you make via the Settings UI will take precedence over what is defined in your theme&#8217;s code using <code>add_theme_support()</code>. This is something to keep in mind as you test and explore the plugin.</p>



<h2 class="wp-block-heading">Browser Support</h2>



<p>Cross-document view transitions are currently supported in a range of modern browsers, including Chrome, Edge, and Safari. For users on browsers that do not yet support this API, there should be no adverse effects; they will simply experience the traditional hard transitions between pages. You can always check the latest browser compatibility at <a href="https://caniuse.com/mdn-css_at-rules_view-transition" rel="noreferrer noopener" target="_blank">caniuse.com</a>.</p>



<h2 class="wp-block-heading">Your Feedback is Needed!</h2>



<p>If you&#8217;re a WordPress theme developer or maintainer, I strongly encourage you to install the <a href="http://wordpress.org/plugins/view-transitions/" rel="noreferrer noopener" target="_blank">View Transitions plugin</a> and give it a spin. Better yet, consider experimenting with adding support directly into your theme using <code>add_theme_support( 'view-transitions' )</code>.</p>



<p>And if you&#8217;re simply curious about the feature and want to enable it on your WordPress site, I similarly encourage you to try out the plugin. The Core Performance Team would love to get your feedback.</p>



<p>While this is a fresh first release and still experimental, like other plugins incubated within the <a href="https://wordpress.org/plugins/performance-lab/" rel="noreferrer noopener" target="_blank">Performance Lab program</a>, it holds the potential to one day become a part of WordPress Core.</p>



<p>Your early feedback and real-world use cases will be absolutely instrumental in refining this feature, addressing potential issues, and shaping its future.</p>



<h3 class="wp-block-heading">Join Us at WordCamp Europe 2025 Contributor Day!</h3>



<p>I&#8217;m publishing this post in a very timely manner &#8211; today is <a href="https://europe.wordcamp.org/2025/contributor-day/">WordCamp Europe 2025 Contributor Day</a>! I&#8217;ll be at the Core Performance Team table, and a key part of our agenda will be testing, discussing, and gathering feedback on this new <a href="https://wordpress.org/plugins/view-transitions/">View Transitions</a> plugin.</p>



<p>If you&#8217;re attending and are curious to learn more, want to get involved, or have initial thoughts to share, I would love for you to join us. Your insights will be invaluable!</p>



<h3 class="wp-block-heading">Feedback and Contributions</h3>



<p>As this plugin is in its early stages, your feedback is highly encouraged and deeply appreciated.</p>



<ul class="wp-block-list">
<li>If you have suggestions, ideas for new features, or encounter any bugs, please <a href="https://github.com/WordPress/performance/issues/new/choose" rel="noreferrer noopener" target="_blank">submit them as an issue in the WordPress Core Performance Team&#8217;s GitHub repository</a>.</li>



<li>If you need help with troubleshooting or have questions about the plugin, please <a href="https://wordpress.org/support/plugin/view-transitions/#new-topic-0" rel="noreferrer noopener" target="_blank">create a new topic on our support forum</a>.</li>
</ul>



<p>And of course, contributions are always welcome! You can learn more about how to get involved by checking out the <a href="https://make.wordpress.org/performance/handbook/get-involved/" rel="noreferrer noopener" target="_blank">Core Performance Team Handbook</a>.</p>



<p>I&#8217;m really excited to see how the community uses and shapes this new feature!</p>
<p>The post <a href="https://felix-arntz.me/blog/introducing-view-transitions-wordpress-plugin/">Introducing the View Transitions Plugin for WordPress</a> appeared first on <a href="https://felix-arntz.me">felix-arntz.me</a>.</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 05 Jun 2025 04:09:09 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Felix";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:45;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a: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:31:"Tammie Lister: May in WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:34:"https://binatethoughts.com/?p=1853";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:44:"https://binatethoughts.com/may-in-wordpress/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:4014:"<p>This month was full of backlog management, prioritisation and clearing out queues. I focused on identifying where things were blocking and preparing for WordCamp Europe.</p>



<h3 class="wp-block-heading">Areas of contribution</h3>



<p>Whilst my focus was on backlog management, it split into two distinct areas:</p>



<ul class="wp-block-list">
<li><strong>Closing tickets:</strong> I focused on Trac and the Gutenberg repo for this. Make sure to go oldest first.</li>



<li><strong>Focusing design: </strong>Ensuring the design queue was clear about what needed design and what required feedback. This was something that arose from contributor input as a point of confusion, and I have made considerable progress through this. I worked on issues, focusing on having only one of those states, and also addressed items in &#8216;needs design&#8217; that were truly ready for implementation, having an agreement in place. This work does need to continue.</li>
</ul>



<p>I also began thinking about how to optimise and make reporting easier for backlog management, and I want to bring those discussions to WordCamp Europe. </p>



<p>Some stats across the backlog management of issues and tickets in Trac and Github.</p>



<ul class="wp-block-list">
<li><strong>Triaged: </strong>around 143</li>



<li><strong>Closed:</strong> 60</li>



<li><strong>Prioritised in design</strong>: around 49</li>
</ul>



<p>In other contributions, I worked on some designs and gave feedback across a range of tickets. I also began exploring how far DataViews can go and have a list of things to now report from this. It reminded me of the value of pushing the boundaries of our learning features.</p>



<h3 class="wp-block-heading">Upcoming plans for contribution</h3>



<p>The big event is WordCamp Europe, which is taking place this week. I will be attending Contribution Day. After that, the following are my objectives:</p>



<ul class="wp-block-list">
<li><strong>Extensibility:</strong> Continue my focus on work there and prioritise how to establish criteria for what gets in and what does not. Hopefully, unblocking a range of issues during WordCamp Europe.</li>



<li><strong>Backlog management: </strong>My work is constant, but I want to explore how it can evolve smarter, potentially utilising systems to manage and enhance workflow.</li>



<li><strong>Papercuts: </strong>After WordCamp, I will pick this up again with several issues to focus on.</li>
</ul>



<p>With WordCamp Europe, I am restricting my plans beyond what I have mentioned above, as things will likely emerge from it and change.</p>



<h3 class="wp-block-heading">Sponsors this month</h3>



<p>I now have three company sponsors: <a href="https://www.bigscoots.com/" rel="noreferrer noopener" target="_blank">BigScoots</a>, <a href="https://greyd.io/" rel="noreferrer noopener" target="_blank">Greyd</a> and <a href="https://kinsta.com/" rel="noreferrer noopener" target="_blank">Kinsta</a>. I also have five sponsors through GitHub: <a href="https://github.com/aaronjorbin" rel="noreferrer noopener" target="_blank">Aaron Jorbin</a>, <a href="https://github.com/timnashcouk" rel="noreferrer noopener" target="_blank">Tim Nash</a>, <a href="https://github.com/jeffpaul" rel="noreferrer noopener" target="_blank">Jeffrey Paul</a>, <a href="https://github.com/foosantos" rel="noreferrer noopener" target="_blank">Felipe Santos</a> and <a href="https://github.com/scotrumery">Scot Rumery</a>. To everyone who sponsored me and helped me secure a sponsorship, thank you.</p>



<p><strong>Want to sponsor me? </strong>You can go through <a href="https://github.com/karmatosed" rel="noreferrer noopener" target="_blank">GitHub</a> or also get in <a href="mailto:hello@tammielister.com" rel="noreferrer noopener" target="_blank">touch</a>.</p>



<p>There is always sponsorship, of course, that is volunteered, and I&#8217;ll do as much as possible whilst still keeping things flowing – let&#8217;s get contributing!</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, 04 Jun 2025 08:48:26 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:18:"binatethoughts.com";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:46;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:78:"Jonathan Desrosiers: WordPress Grab Bag: WCEU, WordPress turns 22, new AI team";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:38:"https://jonathandesrosiers.com/?p=4833";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"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://jonathandesrosiers.com/2025/06/wordpress-grab-bag-wceu-wordpress-turns-22-new-ai-team/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:5531:"<p class="">I haven&#8217;t been doing a great job blogging regularly so far this year. We&#8217;ve now passed the 40% mark of the calendar year, and I&#8217;m hoping to make up for that during the remaining 60% of the time. To get started, here are some thoughts on a few topics that have been on my mind over the course of the last week.</p>



<h2 class="wp-block-heading" id="h-attending-and-presenting-at-wordcamp-europe">Attending and presenting at WordCamp Europe</h2>



<p class="">I&#8217;m currently sitting in Terminal A of <a href="https://www.massport.com/logan-airport">Boston Logan International Airport</a> waiting for the first leg of my journey to <a href="https://jonathandesrosiers.com/2025/04/speaking-at-wordcamp-europe-2025/">attend WordCamp Europe in Basel, Switzerland</a>. In addition to the obvious reasons to be excited (seeing friends, meeting new people, checking out what everyone in the community has been building), I&#8217;m also really happy with what my presentation has grown into and can’t wait to present it. It’s not just about the decision making frameworks Core Committers use, but also a reflection on the project&#8217;s foundational philosophies and how they&#8217;ve helped the project thrive.</p>



<figure class="wp-block-image alignwide size-large wp-lightbox-container"><img alt="" class="wp-image-4896 not-transparent" height="576" src="https://jonathandesrosiers.com/wp-content/uploads/2025/06/wceu-title-slide-1024x576.jpg" width="1024" /><button class="lightbox-trigger" type="button">
			<svg fill="none" height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg">
				<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">
			</svg>
		</button></figure>



<p class="">There are several points in my speaker notes that have stuck with me. I plan to write some additional posts to explore deeper in the coming weeks!</p>



<p class="">If you&#8217;re unable to join in person, I&#8217;m including the live stream below.</p>



<figure class="wp-embed-aspect-4-3 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube"><div class="wp-block-embed__wrapper">

</div></figure>



<h2 class="wp-block-heading">WordPress reaches 22 years old</h2>



<p class="">Last week was the 22nd birthday for the WordPress project. The <a href="https://wordpress.org/news/2003/05/wordpress-now-available/">first version of the software was released on May 27, 2003</a>. While 22 is not as exciting as 21, I always enjoy reading the reflections from the community and seeing how the software we all help maintain has changed lives.</p>



<p class="">I first used WordPress around 2007, and received my first credit for contributing in 2013. This means I’ve now been a user of WordPress for over 80%, and a contributor for over 55% of the project’s lifespan.</p>



<p class="">Happy Birthday WordPress! <img alt="🎉" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f389.png" style="height: 1em;" /><img alt="🎊" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f38a.png" style="height: 1em;" /><img alt="🍾" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f37e.png" style="height: 1em;" /><img alt="🥳" class="wp-smiley" src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f973.png" style="height: 1em;" /></p>



<h2 class="wp-block-heading">New WordPress AI team</h2>



<p class="">Also last week, a post was published to <a href="https://wordpress.org/news/2025/05/announcing-the-formation-of-the-wordpress-ai-team/">announce the formation of a new AI team for the project</a>. I&#8217;m really looking forward to this team getting started. Initially, the <a href="https://make.wordpress.org/core/2023/05/02/lets-talk-wordpress-core-artificial-intelligence/">stance of the Core team</a> was to observe and wait for the needs to become more clear. But the time has come to explore taking action in some important areas. Specifically extensibility of the block editor, documentation, and ensuring any necessary internal functionality is available through APIs.</p>



<p class="">Near term, I think once some of these items have a plan to be addressed, what could make the most sense is several canonical AI plugins that integrate with different models or services similar to how importing site content works (WordPress, Tumblr, Movable Type/TypePad, etc. each have their own plugin).</p>



<p class="">If you have thoughts about the place AI has in the project, join the conversation in the <a href="https://wordpress.slack.com/archives/C08TJ8BPULS">#core-ai channel</a> of the <a href="https://make.wordpress.org/chat/">WordPress.org Slack</a>!</p>



<p class="has-text-align-right"><em>Featured image credit: <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a> licensed <a href="https://wordpress.org/photos/photo/8456505dd5/">photo</a> by <a href="https://www.nilovelez.com/">Nilo Velez</a> from the <a href="https://wordpress.org/photos/">WordPress Photo Directory</a>.</em></p>
<p>The post <a href="https://jonathandesrosiers.com/2025/06/wordpress-grab-bag-wceu-wordpress-turns-22-new-ai-team/">WordPress Grab Bag: WCEU, WordPress turns 22, new AI team</a> appeared first on <a href="https://jonathandesrosiers.com">Jonathan Desrosiers</a>.</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 03 Jun 2025 11:32: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:19:"Jonathan Desrosiers";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:47;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:75:"Tammie Lister: Optimising Triage and Review Processes in WordPress Using AI";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:34:"https://binatethoughts.com/?p=1826";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:88:"https://binatethoughts.com/optimising-triage-and-review-processes-in-wordpress-using-ai/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:7538:"<p>Integrating advancements into open source processes makes sense. The friction often comes in the how and the usefulness. While AI holds immense potential for revolutionising triage and review processes, it&#8217;s crucial to acknowledge its current limitations and look to where it can evolve, learn, and grow to its full capacity. This post aims to explore this potential, offering a realistic perspective. It&#8217;s not a post that claims to solve everything; instead, it will show how we can get started and regain some hours to focus on other needed areas of the project.</p>



<figure class="wp-block-image size-full"><img alt="" class="wp-image-1827" height="1024" src="https://binatethoughts.com/wp-content/uploads/2025/06/openart-38ad7cab-43e0-4eed-be32-4d7835b68423.png" width="1024" /></figure>



<p>Before we delve into this topic, it&#8217;s important to note that while AI can achieve a great deal, it also has its limitations. This post will focus on high-level inferences rather than direct proposals, starting with small steps. I don&#8217;t have all the answers, but together, we can find them. My perspective is informed by extensive theme reviews and ongoing triage work, so I won&#8217;t cover areas where I lack knowledge.</p>



<h2 class="wp-block-heading">What can it do today</h2>



<p>In simple terms, the things we likely shouldn&#8217;t be doing manually include reviews, first-pass triage, testing and routine checks. Historically, there have been areas where we have been slowly adding more processes over time before the term AI was widely used. That&#8217;s one of the key things: often, having a robust process, a path trodden and documented, means the parsing is simple to learn, and therefore you can hand it over more easily.</p>



<p>Triage is already being done incredibly effectively in areas like healthcare. There it is improving accuracy and saving lives, as noted in an article by Reuters:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>&#8220;Our study provides the first multinational evidence that artificial intelligence can help enhance accuracy&#8221; in determining HER2 clinical categories, &#8220;potentially closing critical diagnostic gaps and enabling more patients to have access to new therapies, said Dr. Marina De Brot of the A.C. Camargo Cancer Center in Sao Paulo, Brazil, who led the study.<br />&#8220;Until recently, most of these patients would have not been offered these options,&#8221; she said.&#8221;<br /><a href="https://www.reuters.com/business/healthcare-pharmaceuticals/health-rounds-amgen-blood-platelet-booster-helps-patients-who-need-chemotherapy-2025-05-30/?utm_source=chatgpt.com">Link</a>: Reuters</p>
</blockquote>



<h2 class="wp-block-heading">A triage first-pass</h2>



<p>The first area is improving first-pass triages. What do I mean by this? In simple terms, doing a lot of the manual work like duplicate label removal, closing after a specific time, checking for details and even duplicate issue detection. Pattern-matching tasks are where these systems excel, and a lot of this is simply a matter of pointing to our learnings during triage and matching them accordingly.</p>



<p>This is basic; it&#8217;s not AI as much as it&#8217;s processing. It&#8217;s one step above issue templates. The following piece is where it gets interesting: the model for triage needs to learn comprehension of the issue contents. We need to add features like dashboards to the flow because the first stage could be a catch-all that, over time, allows it to triage more to a buffer dashboard, recommending specific states. </p>



<p>All of these approaches are an excellent way of training, as it provides the model with some freedom to make mistakes, be corrected, learn from them, and refine its patterns. We also collectively don&#8217;t have to worry about labels being added and things closed. Whilst those of us doing triage, get to benefit early on and help train.</p>



<h2 class="wp-block-heading">The impact of triage processing</h2>



<p>As far as triage goes, we will be far from achieving full automation of this for quite some time. My instinct is that this is more of a help in clearing a percentage and making it easier for those working on issues. It can do that in significant numbers, to the extent that over 50% of the time spent in triage could be recovered I&#8217;d suggest sooner over later. I do see this going up over time, but how much depends on the quality of the modelling and our trust as a project.</p>



<h2 class="wp-block-heading">Theme review first-pass</h2>



<p>Just as triage, I suggest adopting a similar model for theme reviews. In this case, too, if we are honest, reviewing what we do and don&#8217;t want in reviews would be beneficial. I will be bold here, but nearly 100% of theme reviewing could be done through a process without manual interaction fairly soon.</p>



<p>How do we get there? We achieve this through a balance of reviewing the theme review guidelines and, similarly, triage training. These reviews are very formulaic and matching. This is what models thrive on. Suppose we gain trust in this approach and implement the process. In that case, we can then focus all our effort on manual reviewing in various areas, including raising the quality of the core product, documentation, education, and our theme offerings as a project.</p>



<h2 class="wp-block-heading">Testing</h2>



<p>We have, over the years, even before the recent AI tech wave, been leaning into less manual testing. Issues and tickets needed less manual testing. We require testing for regression across all areas in our project. That&#8217;s not AI, but we can take it even further, adopting a more updated approach to our testing.</p>



<p>The reality of the world today is that you can share a screenshot with code editors and get an application mocked up that looks like that. We also need to evolve our systems to test for differences and minimise the need for multiple humans to be involved in each ticket.</p>



<h2 class="wp-block-heading">What will we do if it does this?</h2>



<figure class="wp-block-image size-full"><img alt="" class="wp-image-1829" height="1024" src="https://binatethoughts.com/wp-content/uploads/2025/06/openart-48c1cda1-444d-40e3-89b1-5d046bc4143f.png" width="1024" /></figure>



<p>I share these perspectives as someone who performs triage and frequently engages in this manual work. Some may be sceptical or wonder how their sponsored time will be allocated. The point is that there is a great deal that needs to be done in this project. These systems to implement today&#8217;s technology need people. The models require training by experts. Then they need to be nurtured and grown by those same people. There will always be a need for contributors.</p>



<p>At this time, with our capabilities in automation and AI in a world of agentic flows, we can do better than relying solely on manual processes. We must do so in order not to be left behind. It is also not resourceful to use humans this way. We can use our scarce human resources more sensibly. Our time is finite, and this project requires us to accomplish many tasks. There will be a balance between what we automate and utilise as resources and what we provide to a system. That, though, is something we need to start working out, and we do that by realising we need to find a balance in how we do things and measure the costs of our processes today and in the future.</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sun, 01 Jun 2025 12:42:01 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:18:"binatethoughts.com";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:48;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a: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:"Open Channels FM: Building Reliable WooCommerce Sites: Insights into Hosting, Scaling, and Workflow";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:47:"https://openchannels.fm/?post_type=blog&p=97002";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:103:"https://openchannels.fm/building-reliable-woocommerce-sites-insights-into-hosting-scaling-and-workflow/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:222:"Shared strategies to ensure reliable WooCommerce performance during traffic spikes, emphasizing standardized processes, trusted hosting partnerships, and automated testing to foster client trust and ease agency operations.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 29 May 2025 12:38:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"BobWP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:49;a:6:{s:4:"data";s:21:"
	
	
	
	
	
	
	
	
	
	
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:5:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:122:"Open Channels FM: Launching Upload Worthy: Video Strategy, Brand Awareness, and Conversions for WordPress Product Creators";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:32:"https://openchannels.fm/?p=97496";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:126:"https://openchannels.fm/launching-upload-worthy-video-strategy-brand-awareness-and-conversions-for-wordpress-product-creators/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:229:"The inaugural episode of "Upload Worthy" explores video marketing strategies with hosts Christian Taylor and Adam Weeks. They discuss timing for video investment, brand awareness versus conversions, and measuring content success.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 29 May 2025 09:57:00 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"BobWP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}}}}}}}}}}s:4:"type";i:128;s:7:"headers";O:48:"WpOrg\Requests\Utility\CaseInsensitiveDictionary":1:{s:7:"*data";a:9:{s:6:"server";s:5:"nginx";s:4:"date";s:29:"Thu, 26 Jun 2025 05:17:56 GMT";s:12:"content-type";s:8:"text/xml";s:13:"last-modified";s:29:"Thu, 26 Jun 2025 05:00:16 GMT";s:4:"vary";s:15:"Accept-Encoding";s:15:"x-frame-options";s:10:"SAMEORIGIN";s:16:"content-encoding";s:2:"br";s:7:"alt-svc";s:19:"h3=":443"; ma=86400";s:4:"x-nc";s:9:"HIT ord 2";}}s:5:"build";s:14:"20211220193300";}