WordPress : Pourquoi un tableau est-il créé dans une fonction accrochée pour personnaliser le registre rempli lorsque le personnalisateur est chargé mais pas lorsque le frontal est chargé ?

Publié par Jean-Michel le

J’ai une fonction conçue pour faire deux choses : 1) créer des contrôles/paramètres de sélecteur de couleurs dans le personnalisateur et 2) créer un tableau multidimensionnel $customizeDataà afficher dans les styles d’en-tête et utilisé pour localiser les variables pour customizer.js.

Le premier objectif est réussi. Le second m’a conduit ici. J’ai ajouté un var_dump pour $customizerDataindex.php le tableau est nul sur le front-end, mais est rempli comme prévu lorsque je le charge dans le personnalisateur.

Voici la fonction en question :

if (! function_exists('_sf_customzier_color_loop') ) :
function _sf_customzier_color_loop($colors, $countStart = 10, $section) {
//Not sure why I have to do this first thing
global $wp_customize;
//declare $customizerData as a global variable
global $customizerData;
//start the counter at 10 or whatever was set.
$count = $countStart;
foreach ($colors as $things) {
    $slug = $things['slug'];
    $id = "_sf[{$slug}]";
    //If current array has a priority set, use it, if not use the counter.
    if (! isset($things['priority']) ) {
        $priority = $count;
    }
    else {
        $priority = $things['priority'];
    }
    $wp_customize->add_setting( $id, array(
        'type'              => 'option', 
        'transport'     => 'postMessage',
        'capability'     => 'edit_theme_options',
        'default'       => $things['default'],
    ) );

    $control = 
    new WP_Customize_Color_Control(
            $wp_customize, $slug, 
        array(
        'label'         => __( $things['label'], '_sf' ),
        'section'       => $section,
        'priority'      => $priority,
        'settings'      => $id
        ) 
    );
    $wp_customize->add_control($control);
    //create array to be used for the outputting styles to wp_head and customizer.js
    $customizerData [] = array(
        'id' => $id,
        'slug' => $slug, 
        'selector' => $things['selector'],
        'property' => $things['property'],
    );

    //advance priority counter
    $count++;
}
}
endif;
// ! _sf_customzier_color_loop exists 

Vous pouvez voir un exemple de ce que j’alimente à ceci à: https://github.com/Shelob9/_sf_lib/blob/1.1-fancy-data/customizer/customizer-sidebar.php

Que dois-je faire pour que le tableau soit rempli sur le front-end ?

Solution n°1 trouvée

Quelques points :

  • Le customize_registercrochet d’action passe en fait votre fonction à la $wp_customizevariable, vous n’avez pas besoin de la déclarer en tant que global. Mettez-le simplement comme premier argument dans votre déclaration de fonction.

  • La raison pour laquelle votre code ne s’exécute pas sur le front-end du site est que le customize_registerhook d’action ne s’exécute que lorsque le personnalisateur est utilisé. Si vous voulez déclarer des données quelque part où elles seront toujours disponibles, ne les placez pas dans une fonction accrochée à customize_register.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *