WP Customize refresh problem

时间:2014-03-16 作者:user43506

嗨,我正在为WP自定义添加选项。

大多数情况下,一切正常,但我的一个变量没有在预览窗口中刷新。

$wp_customize->add_setting(\'checkbox\', array(
        \'capability\' => \'edit_theme_options\',
        \'default\' => false,
    ));

$wp_customize->add_control(\'checkbox_control\', array(
    \'settings\' => \'checkbox\',
    \'label\'    => __(\'Activate Coming Soon Page\', \'ln\'),
    \'section\'  => \'general_settings\',
    \'type\'     => \'checkbox\',
    \'priority\' => 1,
));
这是我添加复选框的方式,这是我的签入函数。php

function template_redirect() {
 if(true == get_theme_mod(\'checkbox\')) {
        include (TEMPLATEPATH . \'/coming-soon.php\');
        exit;
    }
}
add_action( \'template_redirect\', \'template_redirect\' );
所以一切都正常~唯一的问题是,当您在WP Customize中并单击复选框时,预览窗口会重新加载页面,但不会显示更改。如果单击“保存并手动刷新”,则一切正常。

有什么建议可以解决这个问题吗?

非常感谢。

更新时间:

I found what is breaking WP CUSTOMIZER, it is the exit of the redirect. Is there another way how to fix this issue. I need to redirect to that page if the checkbox is TRUE

 function template_redirect() {
     if(true == get_theme_mod(\'checkbox\')) {
            include (TEMPLATEPATH . \'/coming-soon.php\');
            exit;  !!!!!!!!!!!!!!!!!
        }
    }
    add_action( \'template_redirect\', \'template_redirect\' );

3 个回复
SO网友:Weston Ruter

无法在预览中看到更改的一个可能原因是coming-soon.php 模板不包括必需的wp_head()wp_footer() 正在拨打电话。如果查看浏览器的DOM,实际上应该会看到iframe 正在可见的后面创建iframe. 但是,如果模板不包含标准主题挂钩,则customize-preview.js 脚本将不会排队,并且无法与iframe 已加载,因此可以替换以前的iframe.

同样的问题实际上在年报告给了WP Core Trac#37981: “template\\u include not working in customizer previewer”中,我answered 类似地:

你必须确保wp_head()wp_footer() 调用以打印脚本。如果customize-preview.js 如果未输出,则加载的页面将无法与页面已完成加载的父框架通信。这个问题最近在其他地方出现了:https://github.com/Automattic/amp-wp/issues/477#issuecomment-247679386

SO网友:MBL

您是否尝试过显式添加\'transport\' 通话时选择$wp_customize->add_setting?

e、 g。

$wp_customize->add_control(\'checkbox_control\', array(
    \'settings\' => \'checkbox\',
    \'label\'    => __(\'Activate Coming Soon Page\', \'ln\'),
    \'section\'  => \'general_settings\',
    \'type\'     => \'checkbox\',
    \'priority\' => 1,
    \'transport\'   => \'refresh\'
));
或者,您可以使用框架与WP主题定制器进行交互。例如,Slobodan躁狂呼叫有一个很好的Customizer Boilerplate. 例如,要使用Customizer样板中的复选框,只需从Github将文件下载到主题的目录,在主题中包含调用functions.php 定制样板(例如。require( get_stylesheet_directory() . \'/customizer-boilerplate/customizer.php\' ); 然后可以修改中提供的选项options.php 只保留复选框:

                /*
             * ==============
             * ==============
             * Checkbox field
             * ==============
             * ==============
             */
            \'new_checkbox_field\' => array(
                \'setting_args\' => array(
                    \'default\' => true,
                    \'type\' => \'option\',
                    \'capability\' => $thsp_cbp_capability,
                    \'transport\' => \'refresh\',
                ),                  
                \'control_args\' => array(
                    \'label\' => __( \'New checkbox field label\', \'my_theme_textdomain\' ),
                    \'type\' => \'checkbox\', // Checkbox field control
                    \'priority\' => 2
                )
            )

SO网友:Elio

只有在不希望执行任何其他挂接到template\\u redirect的内容时,才应该使用template\\u redirect。相反,要包含替代模板,必须使用template_include

function ql_template_include( $template ) {
    if ( true == get_theme_mod( \'checkbox\' ) ) {
        return TEMPLATEPATH . \'/coming-soon.php\';
    }
    return $template;
}
add_action( \'template_include\', \'ql_template_include\' );
还有其他过滤器,如single_templatearchive_template. 你可以在Codex上找到更多信息http://codex.wordpress.org/Plugin_API/Filter_Reference/template_include

结束

相关推荐