WordPress Customizer ne définit pas la valeur par défaut lors de l’installation initiale ?

Publié par Jean-Michel le

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

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 *