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é ?
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 $customizerData
index.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_register
crochet d’action passe en fait votre fonction à la$wp_customize
variable, 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_register
hook 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
.
0 commentaire