我通过在每次预览窗口刷新整页或URL更改时(以及在初始自定义程序加载时)从预览窗口向自定义程序面板发送自定义事件来实现这一点。
我可以通过此事件发送有关当前页面的任何所需数据。目前,我仍然只关注body类,但毫无疑问,我会在当前页面上更新这些内容,以包含更全面的信息(通过本地化数据)。
绑定到自定义事件允许我在customizer面板中显示/隐藏控件,还可以根据当前页面和某些帖子元字段(如果我们在单篇帖子上)显示通知(非常有用)。
下面是从预览窗口发送带有body类数据的自定义事件,然后通过customizer面板绑定到该事件的基本代码。
自定义预览窗口JS:
( function( $, api ) {
\'use strict\';
$( function() {
api.preview.bind( \'active\', function() {
var bodyClass = document.querySelector(\'body\').className,
bodyClassArr = bodyClass.split(" ");
api.preview.send( \'custom-event\', bodyClassArr );
console.log(\'Sent!\');
} );
} );
}( jQuery, wp.customize ) );
自定义程序面板JS:
( function( $, api ) {
\'use strict\';
wp.customize.bind( \'ready\', function() {
wp.customize.previewer.bind( \'custom-event\', function( data ) {
console.log(\'Data from preview window: \', data);
} );
} );
}( jQuery, wp.customize ) );
输出: