如何在新的Customize.php(主题定制)屏幕上执行条件脚本

时间:2012-06-14 作者:N2Mystic

新的“自定义”主题屏幕是WordPress 3.4中一个受欢迎的新增内容,但是,我发现它与我加载页脚中加载的脚本的方法相冲突:

在函数中。php

if(!is_admin())
{
/* GET PUBLIC FUNCTIONS
*************************************************************/
require_once(TEMPLATEPATH . \'/functions_public.php\');
}
在functions\\u public中。php

/* Move scripts to the footer, speeding up page loading time as per http://yhoo.it/IAL94Z
*************************************************************************/
if ( isset($_GET[\'page\']) && $_GET[\'page\'] == \'customize.php\') echo "in customize.php"; else echo "NOT in customize.php";

if(!get_option(\'my_scripts_head\')){
    remove_action(\'wp_head\', \'wp_print_scripts\');
    remove_action(\'wp_head\', \'wp_print_head_scripts\', 9);
    remove_action(\'wp_head\', \'wp_enqueue_scripts\', 1);
    add_action(\'wp_footer\', \'wp_print_scripts\', 5);
    add_action(\'wp_footer\', \'wp_enqueue_scripts\', 5);
    add_action(\'wp_footer\', \'wp_print_head_scripts\', 5);
}
此代码分支将这些脚本从wp\\u head移动到wp\\u footer。启用此选项(my\\u scripts\\u head)后,“自定义”屏幕将显示我的主题预览,而不显示页脚中加载的脚本。

我发现当我禁用此选项时,“自定义”屏幕加载良好,包括我的脚本。

在“自定义”中预览主题时。php,wp\\U页脚是否未激发?

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

好的,首先,让我们把事情安排妥当callback 连接到适当的action hook:

<?php
function wpse55227_enqueue_scripts() {
    // Enqueue code goes here
}
add_action( \'wp_head\', \'wpse55227_enqueue_scripts\' );
?>
我们将把所有代码放入这个回调中。

下一步是添加if ( ! is_admin() ) 条件包装器:

<?php
function wpse55227_enqueue_scripts() {
    if ( ! is_admin() ) {
        // Enqueue code goes here
    }
}
add_action( \'wp_head\', \'wpse55227_enqueue_scripts\' );
?>
现在,让我们添加原始代码:

<?php
function wpse55227_enqueue_scripts() {
    if ( ! is_admin() ) {
        if(!get_option(\'my_scripts_head\')){
            remove_action(\'wp_head\', \'wp_print_scripts\');
            remove_action(\'wp_head\', \'wp_print_head_scripts\', 9);
            remove_action(\'wp_head\', \'wp_enqueue_scripts\', 1);
            add_action(\'wp_footer\', \'wp_print_scripts\', 5);
            add_action(\'wp_footer\', \'wp_enqueue_scripts\', 5);
            add_action(\'wp_footer\', \'wp_print_head_scripts\', 5);
        }
    }
}
add_action( \'wp_head\', \'wpse55227_enqueue_scripts\' );
?>
所以,在这一点上,我们应该回到你之前的位置。现在,让我们来说明定制器。最简单的方法是检查$wp_customize 正在设置全局:

<?php
function wpse55227_enqueue_scripts() {
    // Globalize
    global $wp_customize;
    // If $wp_customize is set, return
    if ( isset( $wp_customize ) ) {
        return;
    }

    if ( ! is_admin() ) {
        if(!get_option(\'my_scripts_head\')){
            remove_action(\'wp_head\', \'wp_print_scripts\');
            remove_action(\'wp_head\', \'wp_print_head_scripts\', 9);
            remove_action(\'wp_head\', \'wp_enqueue_scripts\', 1);
            add_action(\'wp_footer\', \'wp_print_scripts\', 5);
            add_action(\'wp_footer\', \'wp_enqueue_scripts\', 5);
            add_action(\'wp_footer\', \'wp_print_head_scripts\', 5);
        }
    }
}
add_action( \'wp_head\', \'wpse55227_enqueue_scripts\' );
?>
顺便问一下:出于好奇,为什么要将所有排队的脚本都移动到页脚?我想这很有可能会破坏东西,和/或造成意外后果。

结束

相关推荐