新的WP_Customize API-它是如何在幕后工作的?

时间:2012-06-24 作者:Alex

我注意到,如果您通过新的“自定义”功能进行更改,当您在iframe预览文档中的不同页面上导航时,您的更改仍然适用,即使它们未保存。

看起来WP正在某处存储临时更改,如果在“自定义”模式下查看站点,它会在站点上应用这些更改。

但网站如何知道它处于自定义模式?因为我没有看到任何附加到链接或类似链接的查询参数。

2 个回复
SO网友:Otto

这里有一些适用的位,但不足之处在于customize-preview.js:

this.body.on( \'click.preview\', \'a\', function( event ) {
    event.preventDefault();
    self.send( \'scroll\', 0 );
    self.send( \'url\', $(this).prop(\'href\') );
});
事件。preventDefault阻止链接实际工作。然后,以下代码向上发送一条消息,告诉它a)滚动回页面顶部,b)更改URL。

之所以在这里发送消息,是因为不只是一个iframe,还有两个iframe。您单击的页面实际上加载到另一个iframe中,其中添加了自定义程序的设置(通过POST 确实如此),然后使用淡入效果来淡出旧效果,并无缝淡入新效果。这可以防止屏幕在切换到新页面时变白、变丑和闪烁。

还消除了对主题代码进行过滤等操作的需要,并可能修改页面的外观。因此,主题按原样显示,其内容没有重大变化。

存在类似的代码来阻止表单提交工作(它什么都不做)等等。

用于拦截和处理自定义程序值的筛选器位于class-wp-customize-setting.php. 这个preview() 函数添加处理传入值所需的过滤器_preview_filter() 功能是该过滤器。它只需要get_option()get_theme_mod() 调用,通知何时应该修改选项,并返回修改后的值。

SO网友:Andy Adams

您会注意到,当您单击customizer预览窗口中的链接时,生成的请求是POST 请求,而不是普通GET. 自定义程序似乎正在覆盖任何链接单击,并执行POST 而是使用以下表单数据:

wp_customize: on
theme: themename
customized: {json-encoded-options-here}
customize_messenger_channel: preview-1
Thecustomized 字段是包含已修改的选项的字段,因此数据将在此处传递到主题。然后,定制程序代码会在请求主题选项时截取(通过过滤器,我不确定具体是哪一个)主题选项,并将其替换为customized 参数

结束

相关推荐

使用JSON API时如何处理快捷码

我在争论一个小逻辑问题:我正在制作一个单页WP主题,它使用JSON API作为内容,并使用Mustache样式模板作为演示文稿。。。然而,短代码?处理这些问题的最佳方法是什么?例如:JSON结果->模板->DOM注入->触发库劫持/幻灯片放映/无论是什么短代码?上面的方法感觉有点脏,因为我要么继续启动解析器来处理短代码,要么必须使用JQuery。带电(严重脏污)。有人能想出一种更优雅的方法来做这件事吗?