WordPress Customizer ne définit pas la valeur par défaut lors de l’installation initiale ?
J’ai quelques problèmes pour que les valeurs par défaut soient définies dans WordPress Customizer pour les enregistrer dans la base de données lors de l’installation initiale sans que l’utilisateur n’enregistre d’abord le Customizer pour les définir. J’ai essayé la solution de ce fil sans succès:
Utiliser la valeur par défaut de wp_customizer dans la sortie theme_mod ?
Customizer section/setting/control
//Social Icons Section
$wp_customize->add_section( 'socialsection', array(
'title' => __( 'Social Media' ),
'priority' => 4,
'capability' => 'edit_theme_options',
) );
//Settings & Controls For Social Media
$wp_customize->add_setting( 'facebooklink_edit', array(
'default' => '#',
'sanitize_callback' => 'esc_attr',
'transport' => 'refresh',
) );
$wp_customize->add_control('facebooklink_edit', array(
'label' => __( 'Facebook Link', 'spiffing' ),
'section' => 'socialsection',
) );
Sortie sur le frontend :
<a href="<?php echo get_theme_mod('facebooklink_edit', '#'); ?>"><div class="fb-footer" id="fb-footer-bg"><i class="fa fa-facebook-f"></i></div></a>
Manipulation CSS basée sur l’action de l’utilisateur dans customzier :
?>
<style type="text/css">
<?php if( get_theme_mod( 'facebooklink_edit' ) == '' ) { ?>
#fb-footer-bg { display: none; }
<?php } // end if ?>
</style>
<?php
D’après ce qui précède, vous pouvez voir que ce mod définit par défaut la valeur sur un ‘#’, et s’il détecte ensuite qu’il n’y a pas de ‘#’, il ajoute le ‘display: none’ à cet identifiant. Devrait être assez simple. Cependant, il semble que l’instruction if voit que sa condition est remplie, ce qui est vide » et applique le ‘display: none’. mais comme vous pouvez le voir dans les deux sections par défaut sur le frontend et le customzier, j’ai défini la valeur par défaut sur ‘#’. Il l’écrit même dans la section d’espace réservé du customzier, mais pas dans la base de données.
Cela fonctionne si l’utilisateur APRÈS l’installation initiale va dans le personnalisateur et clique sur « enregistrer ». Peut-être initier une valeur dans la base de données qui est ensuite lue et affichée sur le frontend.
J’ai ceci pour fonctionner avec des liens, etc., mais ce mod est différent dans le sens où il manipule une div en ajoutant un ‘affichage : aucun’.
Toutes les idées appréciées.
Solution n°1 trouvée
Je pense que vous devriez utiliser quelque chose comme set_theme_mod
. Cela enregistrera la valeur dans la base de données.
set_theme_mod('facebooklink_edit','aaabbbccc');
Pour conserver le paramètre de thème uniquement pour votre thème, utilisez 'type' => 'theme_mod'
.
$wp_customize->add_setting( 'facebooklink_edit' , array(
'type' => 'theme_mod', // only for this theme
'transport' => 'refresh',
'default' => 'aaabbbccc'
//'sanitize_callback' => 'someething...',
) );
La save()
méthode existe à l’intérieur class-wp-customize-manager()
, mais elle ne semble pas destinée à être utilisée uniquement avec JavaScript.
Vos paramètres de thème, en général, peuvent être 'theme_mod'
ou 'option'
.
Ma proposition pour vous était d’utiliser theme_mod
dans ce cas.
Solution n°2 trouvée
J’ai réussi à résoudre ce problème en changeant l’opérateur sur l’instruction ‘if’ :
Original:
?>
<style type="text/css">
<?php if( get_theme_mod( 'facebooklink_edit' ) == '' ) { ?>
#fb-footer-bg { display: none; }
<?php } // end if ?>
</style>
<?php
Actualisé:
?>
<style type="text/css">
<?php if( get_theme_mod( 'facebooklink_edit' ) ===
#fb-footer-bg { display: none; }
<?php } // end if ?>
</style>
<?php
Changer « est égal à » en « est identique » semble résoudre ce problème.
Solution n°3 trouvée
if(!get_theme_mod('facebooklink_edit')) {
set_theme_mod('facebooklink_edit','aaabbbccc');
}
Je l’utiliserais pour définir la valeur uniquement si elle n’existe pas.
au lieu de juste.
set_theme_mod('facebooklink_edit','aaabbbccc');
0 commentaire