web-dev-qa-db-ja.com

新しいcustomize.php(テーマのカスタマイズ)画面で条件付きスクリプトを実行する方法

新しい "カスタマイズ"テーマ画面はWordPress 3.4で歓迎された追加です、しかし、私はそれがフッターでロードされたスクリプトをロードする私の方法と衝突するのを見つけます:

Functions.php内

if(!is_admin())
{
/* GET PUBLIC FUNCTIONS
*************************************************************/
require_once(TEMPLATEPATH . '/functions_public.php');
}

Functions_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_headからwp_footerに移動します。このオプション(my_scripts_head)を有効にすると、[カスタマイズ]画面に、フッターに読み込まれているスクリプトがなくてもテーマのプレビューが表示されます。

このオプションを無効にすると、スクリプトを含めて[カスタマイズ]画面が正しく読み込まれることがわかりました。

Customize.phpでテーマをプレビューしたときに、wp_footerが起動しませんか?

3
N2Mystic

さて、最初に、コールバックを適切なアクションフックにフックして、適切に設定しましょう:

<?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' );
?>

ところで:好奇心から、あなたはフッターにエンキューしているすべてのスクリプトを動かすのはなぜですか?私はそれが物事を壊したり、意図しない結果を引き起こしたりする可能性が非常に高いと思います。

5
Chip Bennett