I slightly modified SkyShab's code, because it fired template change event on page load and it didn't fire when template was changed to default (since getEditedPostAttribute( 'template' ) is then '', which equals to null when testing for template change) const { select, subscribe } = wp.data; class PageTemplateSwitcher { constructor() { this.template = null; } init() { subscribe( () => { const newTemplate = select( 'core/editor' ).getEditedPostAttribute( 'template' ); if (newTemplate !== undefined && this.template === null) { this.template = newTemplate; } if ( newTemplate !== undefined && newTemplate !== this.template ) { this.template = newTemplate; this.changeTemplate(); } }); } changeTemplate() { // do your stuff here console.log('template changed to ${this.template}'); } } new PageTemplateSwitcher().init();