定制器-根据ID/页面ID加载设置/控件/部分/面板

时间:2017-02-21 作者:superwinner

我正在开发一个有很多主题mod、部分和面板的主题。我的问题是,定制程序一次加载所有这些内容,可能需要一段时间才能加载。此外,我真的很想只加载设置,我目前编辑的页面所需的部分。

我一直在寻找一些过滤器WP_Customize_Manager 但我找不到任何可以修改sections, panels, settings, controls 礼节或使用方法。

此时,我通过将页面id添加到定制器url来获取页面id,类似于wp-admin/customize.php?url=pageurl&apageid=700

基于该页面id,我想注册所需的部分和设置,并删除其余部分。

仅举一个例子,对面板、控件和部分也进行了此操作:

function test_reg( $wp_customize ) {
    $currentID = isset( $_GET[\'apageid\'] ) ? absint( $_GET[\'apageid\'] ) : \'\';

    // tmpl_ids() returns an ids array of all the pages that use a certain page template
    if( in_array( $currentID, tmpl_ids() ) {
        $custom_settings = array( 
            \'custom_setting_\' . $currentID, 
        );

        foreach( $custom_settings as $val ) {
            ... register the setting here.
        }

        foreach( $wp_customize->settings() as $setting ) {
            if( ! in_array( $setting->id, $custom_settings ) ) {
                $wp_customize->remove_setting( $setting->id );
            }
        }
    }
}
add_action( \'customize_register\', \'test_reg\', 999 );
这将删除设置,但对预览器不起作用customize_preview_settings, 这将输出所有这些。

不管怎样,你知道怎么做吗?非常感谢。

1 个回复
最合适的回答,由SO网友:Weston Ruter 整理而成

最可靠的方法是根据预览的URL动态地对节、控件和设置进行基于JavaScript的实例化。由于您可以在预览中浏览网站,因此这将确保在浏览网站时根据需要创建特定于帖子/页面的节和控件。这取决于与控件窗格父窗口进行通信的预览,其中包含正在预览的URL(以及查询的帖子ID)。这两个都是在Customize Posts 功能插件,有关预览传递的消息的更多详细信息,请参见#36582.

尽管如此,由于您可能正在寻找一个更静态的PHP解决方案,确保控件窗口和预览窗口都能够看到相同的帖子ID的最简单方法是不要使用自定义查询变量,如apageid 而是使用实际url 参数,用于告知自定义程序要加载到预览中的URL。例如,当您在页面或单篇文章的前端单击“自定义”时url 参数将是永久链接。有了它,您就可以阅读url 参数并将其传递给url_to_postid() 获取帖子ID。

这里还需要另外一件事,那就是实现动态设置。由于设置是基于您是否在给定页面上而在PHP中动态创建的,因此一旦尝试更新或发布变更集,您将看到一条关于无法识别该设置的错误消息。通过实现动态设置,您可以告诉PHP如何根据ID中的模式识别设置并及时注册。

下面是一个完整的工作示例插件,它为最初加载的帖子添加了一个部分,并添加了一个复选框控件,用于指示帖子内容是否应全部大写:https://gist.github.com/westonruter/9e9510c7f57dfbd37eb8c0162b971aa2

你也可以考虑退房Resetting the Customizer to a Blank Slate.

相关推荐

menu customization

我正在我的页面上使用高级主题。该主题在整个站点中只接受一个菜单。该网站是一个单页网站。主题的工作方式是,我们必须建立一个主页,然后使用菜单项来制作网站的各个部分。因此,我创建了一个菜单,其中包含我想要的所有部分,使用我创建的页面已经设置为部分。例如:我有主页、照片、视频等。这些都是单独的页面,但当我将它们作为菜单的一部分时,它们将在一个页面中显示在另一个页面的下方,菜单项将滚动到该页面上的锚定位置。许多主题都是这样工作的。My problem is :我需要翻译菜单或设置另一个页面(不是作为节,而是一个正