Archives

Announcing the Classic Menu Block plugin

Today I am happy to announce a new plugin I have been working on called classic menu block. This is a very simple plugin that adds a new classic menu block to the gutenberg editor. The classic menu block, allows you to embed all the existing menus you have setup on your site, using the existing core function, wp_nav_menu by rendering the block’s output in PHP. This means for those using menus with super custom walkers and plugins that hook into the existing menus filters, these can now be used within, blog posts, block based widget areas and even within full site editing. This differs from the new navigation block, which takes existing menu data and migrates to nested navigation link blocks. For information, checkout the announcement blog post.

This plugin requires WordPress 5.9 to function, as it relays on the new menus endpoints added in this function. This is something near and dear to my heart, as I worked on the menus endpoints for nearly 2 and half years to get them into core. More details on this announcement can be found on the make.WordPress.org blog.

For those that wish to customize attributes passed to the wp_nav_menu, there is a filter called classic_menu_block_attributes. This would allow you change any attributes passed to the wp_nav_menu function.

/**
* Filters menu attributes.
*
* @since 0.1.0
*
* @param array $menu_attrs Menu attributes.
* @param array $attrs Block attributes.
*/
$menu_attrs = apply_filters( 'classic_menu_block_attributes', $menu_attrs, $attrs );

The plugin currently only comes with very basic styling of the menu block. Styling for this block, should come from the theme. However, if you are interested in contributing, please feel free to submit a pull request on github.

I wrote this plugin, to help those that are dipping their toes into the full site editing world. I hope this solves a problem for some people.

Becoming a WordPress core committer.

As you may or not have seen from my original tweet or from the make WordPress blog, in November, it was announced that I am now officially a WordPress core committer.

It has been over a month, since I tweeted about this and a lot has happened. I have been very actively involved in the WordPress 5.9 beta process. Even commiting a number, 52342, 52286, 52268 of important bug fixes and feature of the part of this release. But I haven’t really taken the time to think about this massive honor that I have been given. I have been working on open source, since 2009 and have been actively contributing to WordPress since 2013. I have got many features and tweaks merged to core over this time. But I have always had an eye set on getting commit access someday. It is a goal I set for myself back in 2019. I remember talking to friends at Wordcamp US 2019 about it. Having a goal in life is important and I wanted to good enough to call myself a core committer. It is something I worked really hard at, helping wherever I could and just writing good, well tested code. I don’t take this honor lightly and I understand the pressures this put me under. But this is something that is personally very important to me. It is honestly one of the proudest moment of my life when I finally got this access. There are so many people that have helped me on journey, that if I tried to list them all, I would forget people. But I would like to make special shout out to Pascal Birchler, who nominated me for WordPress committer access and supported me all along the way.

I now understand much better, how much work goes into even the most simple patch. Checking, rechecking, run lints and unit tests. Even commiting a simple patch to core can take hours and hours of your life. I am not sure, that people really understand how much love and care go into WordPress. People build WordPress not code. I have a new found respect for all my follow committers.

If you are interested in sponsor my open source work, I have enabled sponsorship via github.

Thank you to everyone to help me along the way and he is to making 43% of the web better!

Becoming a maintainer of the REST API in WordPress Core

I am happy to announce that I am now officially a maintainers of the REST API in WordPress Core. I join a list of very well respected names in the WordPress community.

The reason I have done this, is that the REST API is important to the future of the WordPress project and the open web. The block based editor, gutenberg was only possible because of the REST API. It is no secret that I think that the REST API is important. I have spoken about REST API Authentication at WordCamp US 2019, built a plugin to expose block data in the REST API and worked heavily on the REST API over different releases.

I hope to bring many improvements to the REST API in the coming releases. Watch this space for updates. If you are interested in supporting my work consider sponsoring me.

REST API Blocks plugin update

The REST API blocks plugin, has been available to download via github, since June 2019. You can checkout the original blog post where I discuss the use of this plugin here.

But I got a request from a user to add the plugin to the WordPress.org plugin repo. Normally, I don’t submit my plugins to the plugin repo, as they are developer focused, but in this case, it seems to makes sense to submit this one. So if you want to download this plugin, it can be found here. If you are using composer, I have also submitted it to packagist, so it can also be installed via composer.

Along with the plugin now easier to get than ever, I also released version 0.3.0. This update includes.

  • Improved handling of table blocks.
  • Improved translations.
  • Improved error handling, if composer install is not run.

The future of the plugin

I am currently actively maintaining the plugin and adding new features. If you have any feature request, please feel free to add them in as a github issue.

As of WordPress 5.8, there is a new block based widget editor. There is a pull request to a block data to the new widget rest api. I hope this functionality merged and get a version 0.4.0 out very soon.

I want to get to the point, there the unit test coverage is a such that it is a plugin that can be used widely. It is useful for others to use this plugin and help me find bugs and test the code. I hope in the future, that this plugin could be used to create a template for a WordPress core patch, meaning this functionality would be part of WordPress. But while blocks are actively changing and with full site editing around the corner, but feels like this functionality should live as a plugin, for the near future.

I hope you joy the plugin, if you have an feedback, please create a github issue. If you like my work and want to see more of it, I opened sponsorship via my github sponsor page.

Detect if video has audio

While working on the Web Stories for WordPress plugin and working on functionality to mute videos, there was a need to detect if a video already had audio or not. But doing some quick googling, I noticed there none of the answers I found online works well or at all. Worse yet, the answers were not written using modern javascript, either not using promises or using jQuery. So today, I am sharing this gist, in hopes that the next person who comes across this problem, has a workabout solution.

function hasAudio(video) {
return (
video.mozHasAudio ||
Boolean(video.webkitAudioDecodedByteCount) ||
Boolean(video.audioTracks?.length)
);
}
function hasVideoGotAudio(src) {
const video = document.createElement('video');
video.muted = true;
video.crossOrigin = 'anonymous';
video.preload = 'auto';
return new Promise((resolve, reject) => {
video.addEventListener('error', reject);
video.addEventListener(
'canplay',
() => {
video.currentTime = 0.99;
},
{ once: true } // Important because 'canplay' can be fired hundreds of times.
);
video.addEventListener('seeked', () => resolve(hasAudio(video)), {
once: true,
});
video.src = src;
});
}
export default hasVideoGotAudio;