web-dev-qa-db-fra.com

Comment exécuter un script conditionnel lorsque vous vous trouvez dans le nouvel écran personnaliser.php (Thème Personnaliser)

Le nouvel écran de thème "Personnaliser" est un ajout bienvenu dans WordPress 3.4. Cependant, je constate qu'il est en conflit avec ma méthode de chargement des scripts chargés dans le pied de page:

Dans functions.php

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

Dans 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);
}

Cette branche de code déplace ces scripts de wp_head vers wp_footer. Lorsque cette option (my_scripts_head) est activée, l'écran "Personnaliser" affiche l'aperçu de mon thème sans les scripts chargés dans le pied de page.

Je trouve que lorsque je désactive cette option, l'écran "Personnaliser" se charge très bien, y compris mes scripts.

Lorsque les thèmes sont prévisualisés dans le fichier personnaliser.php, wp_footer ne se déclenche-t-il pas?

3
N2Mystic

D'accord, commençons par configurer correctement, avec un rappel relié à un crochet d'action approprié :

<?php
function wpse55227_enqueue_scripts() {
    // Enqueue code goes here
}
add_action( 'wp_head', 'wpse55227_enqueue_scripts' );
?>

Nous allons mettre tout notre code dans ce rappel.

La prochaine étape consiste à ajouter notre wrapper conditionnel if ( ! is_admin() ):

<?php
function wpse55227_enqueue_scripts() {
    if ( ! is_admin() ) {
        // Enqueue code goes here
    }
}
add_action( 'wp_head', 'wpse55227_enqueue_scripts' );
?>

Ajoutons maintenant dans votre code original:

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

Donc, à ce stade, nous devrions être revenus à votre état antérieur. Maintenant, prenons en compte le Customizer. Le moyen le plus simple est de vérifier si le $wp_customize global est défini:

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

À propos: par curiosité, pourquoi déplacez-vous tout le script en file d'attente? J'imagine que cela risque très fortement de casser des choses et/ou d'avoir des conséquences inattendues.

5
Chip Bennett