web-dev-qa-db-fra.com

Comment définir la valeur par défaut d'une option dans un thème?

$shortname = "nuod";

array( "name" => "Custom Logo URL",
    "desc" => "Enter the link to your site's custom logo.",
    "id" => $shortname."_logo",
    "type" => "text",
    "std" => "newlogo.png")

Comment puis-je configurer le std automatiquement comme valeur pour <?php echo get_option('nuod_logo'); ?>

3
Zhianc

Comme @Ashfame, comme déjà indiqué, vous ne devriez pas stocker les valeurs par défaut dans la base de données - cela devrait être pour les options sélectionnées par l'utilisateur (bien sûr, s'ils sélectionnent les valeurs par défaut, alors stockez-les finement :).

Cependant, vous n'avez pas besoin d'utiliser wp_parse_args() non plus. get_option vous permet de sélectionner une valeur par défaut. Par exemple:

//If nuod_logo is not found, uses 'newlogo.pnp'
$number = get_option('nuod_logo', 'newlogo.png') 

Cependant, les thèmes et les plug-ins (comme il se doit) conservent souvent leurs options dans un tableau stocké sur une ligne de la base de données. Alors

$my_plugin_options = get_option('my_plugins_options') 

devrait renvoyer toutes les options. Vous pouvez donc conserver toutes les options dans un tableau par défaut $my_plugin_defaults:

$my_plugin_options = get_option('my_plugins_options',$my_plugin_defaults) 

mais ce n'est pas génial non plus - vous devez redéclarer $my_plugin_defaults qui est simplement une copie de code, laissant la place aux bugs, moche - ou vous en faites une variable globale qui est tout simplement fausse. La solution consiste à créer votre propre 'get_option' qui repose sur les paramètres de l'API de WordPress:

 function wpse28954_get_option( $option_name='' ){

      $defaults = array(
          // Array of defaults: option => default value 
      )
      $options = get_option('my_plugins_options',$defaults);

      //Parse defaults again - see comments
      $options = wp_parse_args( $options, $defaults );

      if( !isset($options[$option_name]) )
           return false;

      return $options[$option_name];

 }

Ceci pourrait être amélioré en autorisant wpse28954_get_option à définir une valeur par défaut au cas où ce ne serait pas dans les valeurs par défaut définies

Maintenant, vos valeurs par défaut sont stockées dans un endroit facile à gérer et vous pouvez utiliser wpse28954_get_option['my-option'] pour renvoyer le paramètre enregistré ou la valeur par défaut.


Modifier

AS @Ashfame a souligné dans les commentaires que l'utilisation de wp_parse_args présente l'avantage de fournir des valeurs par défaut pour un sous-ensemble non sauvegardé d'options. J'ai mis à jour ma réponse pour inclure ceci. (Cela rend le $defaults dans get_option plutôt redondant). +1 pour la solution de @Ashfame qui fut le premier à suggérer d'utiliser wp_parse_args.

3
Stephen Harris

Ceci est important, ce que la plupart des gens ne comprennent pas bien. Ne sauvegardez pas les valeurs par défaut dans la base de données. Vous devriez utiliser wp_parse_args() à cette fin.

$defaults = array (
    'logo' => 'http://domain.com/logo.png',
    'do_extra_thing' => false
);

// Parse incomming $args into an array and merge it with $defaults
$options = wp_parse_args( $options, $defaults );

Lorsque $options est vide, comme si vous veniez d'installer un plugin, il peut fonctionner sans écrire quoi que ce soit dans votre base de données. Et quand il contient des valeurs, les valeurs manquantes proviendront du tableau $defaults.

2
Ashfame