在主题定制器预览中,我使用Modernizr包含某些更改页面样式的类。如果我理解正确,将设备类型更改为tablet或mobile只会更改窗口大小,但不会触发任何回调或页面重新加载。
现在,我能想到的唯一方法是在预览脚本中添加一个调整大小的侦听器,并查看新窗口尺寸与哪个设备匹配。
我想知道在预览窗口中是否有内置过滤器或触发回调的方法,以便为每个设备视图包含正确的类。
在主题定制器预览中,我使用Modernizr包含某些更改页面样式的类。如果我理解正确,将设备类型更改为tablet或mobile只会更改窗口大小,但不会触发任何回调或页面重新加载。
现在,我能想到的唯一方法是在预览脚本中添加一个调整大小的侦听器,并查看新窗口尺寸与哪个设备匹配。
我想知道在预览窗口中是否有内置过滤器或触发回调的方法,以便为每个设备视图包含正确的类。
是的,完成此操作的方法是在wp.customize.previewedDevice
值更改。
因此,您可以在customize_controls_enqueue_scripts
与的操作customize-controls
作为其脚本依赖项,它执行以下操作:
(function ( api ) {
api.bind( \'ready\', function() {
function sendPreviewedDevice() {
api.previewer.send( \'previewed-device\', api.previewedDevice.get() );
}
// Send the initial previewed device when preview is ready.
api.previewer.bind( \'ready\', sendPreviewedDevice );
// Send the previewed device whenever it changes.
api.previewedDevice.bind( sendPreviewedDevice );
});
}) ( wp.customize );
处理将消息从控件发送到预览的。然后,您需要在预览中使用单独的脚本来侦听来自窗格的消息。将单独的脚本排入wp_enqueue_scripts
如果is_customize_preview()
例如:(function ( api, $ ) {
api.bind( \'preview-ready\', function() {
var previousPreviewedDevice = null;
// Listen for a previewed-device message.
api.preview.bind( \'previewed-device\', function( previewedDevice ) {
var body = $( document.body );
if ( previousPreviewedDevice ) {
body.removeClass( previousPreviewedDevice );
}
body.addClass( previewedDevice );
previousPreviewedDevice = previewedDevice;
});
});
}) ( wp.customize, jQuery );
结果是,正在预览的设备将作为类显示在预览窗口的body
元素,例如tablet
.我在一个要点中把它推到了一个独立的插件中:https://gist.github.com/westonruter/b2fdf9347c8441ba9933569b15e2faa7
有关更多信息,请参阅Customizer Responsive Server-Side Components Device Preview 插件及其对应的writeup:Previewing Themes with Adaptive Designs in the Customizer. 这可能更接近您想要的,因为您似乎没有实现一个纯粹的响应主题。
我创建了一个插件,在我的WordPress站点中添加了一些短代码。但我是一个PHP新手,所以我相信它可能有一些错误或优化它的方法。它工作正常,显然没有问题。内存使用率为00.04MB。你能看看吗?非常感谢!add_action( \'wp_enqueue_scripts\', \'prefix_add_my_stylesheet\' ); function prefix_add_my_stylesheet() { // Respects SSL, Styl