Je construisais une page d'options de thème avec l'API de paramètres. J'utilise un appel ajax pour calculer automatiquement certains paramètres à partir d'autres pages/onglets. J'ai remarqué que tous les nouveaux paramètres par défaut ("std") s'afficheront dans leurs champs de saisie mais ne seront pas définis lorsque je passerai un appel ajax avec:
array_merge(get_option('some_options', 'fail'), get_option('some_other_options', 'fail'));
C'est-à-dire qu'ils seront indéfinis jusqu'à la première fois que j'enregistre les nouveaux paramètres. Tous les paramètres définis précédemment seront rendus dans l'objet résultant, mais tous les ajouts nouvellement créés ne seront pas définis.
Je me demandais si les valeurs par défaut de l'option sont enregistrées lorsque vous passez au thème pour la première fois.
Ainsi, lorsque j'ajoute de nouvelles options en utilisant ce thème, les options par défaut ne sont pas enregistrées. Si tel est le cas, je crains que certaines valeurs de clé ne soient omises lorsqu’un utilisateur active ce thème pour la première fois.
Donc, juste pour être clair sur ce qui se passe.
1) J'ai quelques options pour commencer. -> tout va bien.
2) Je crée de nouvelles options. -> les problèmes commencent
3) La page des paramètres se charge. Les valeurs par défaut se trouvent dans les champs de saisie, mais lorsque je passe un appel et vérifie la base de données. "non défini" est renvoyé pour ces nouveaux paramètres. Tous les autres paramètres sont bons.
4) Recharger la page. -> pas de changement
5) Enregistrer les modifications.
6) L'appel Ajax est correct, toutes les valeurs sont définies.
Ne comptez pas sur les options jamais enregistrées. Il est préférable que le thème fonctionne normalement, que l'utilisateur accède ou non à la page Paramètres du thème.
La première étape consiste à définir une fonction pour renvoyer vos options par défaut, soit:
Définissez-les dans la fonction, puis référencez-la dans votre tableau de paramètres d'option.
function mytheme_option_parameters() {
$parameters = array(
'foo' => array(
'name' => 'foo',
'title' => 'Foo',
'std' => 'bar'
),
'foo1' => array(
'name' => 'foo1',
'title' => 'Foo1',
'std' => 'bar1'
),
);
return $parameters;
)
function mytheme_option_defaults() {
$parameters = mytheme_option_parameters;
$defaults = array();
foreach ( $parameters as $param ) {
$defaults[$param['name']] = $param['std'];
}
return $defaults;
}
Définissez-les dans votre tableau de paramètres d'option, puis parcourez ce tableau dans votre fonction.
function mytheme_option_defaults() {
$parameters = mytheme_option_parameters;
$defaults = array();
foreach ( $parameters as $param ) {
$defaults[$param['name']] = $param['std'];
}
return $defaults;
}
function mytheme_option_defaults() {
$defaults = array(
'foo' => 'bar',
'foo1' => 'bar1'
);
return $defaults;
}
function mytheme_option_parameters() {
$defaults = mytheme_option_defaults();
$parameters = array(
'foo' => array(
'name' => 'foo',
'title' => 'Foo',
'std' => $defaults['foo'];
),
'foo1' => array(
'name' => 'foo1',
'title' => 'Foo1',
'std' => $defaults['foo1']
),
);
return $parameters;
)
Ensuite, lorsque vous devez référencer vos options de thème, procédez comme suit:
function mytheme_get_options() {
$defaults = mytheme_option_defaults();
$options = wp_parse_args( get_option( 'theme_themename_options', array() ), $defaults );
return $options;
}
La magie ici est l'appel wp_parse_args()
. Fondamentalement, si aucune option de thème n'est définie, les valeurs par défaut sont utilisées, mais si les options sont définies , elles sont utilisées. Toute option non définie par l'utilisateur (par exemple une option récemment ajoutée) utilisera la valeur par défaut définie par le thème.
Le thème fonctionne par défaut, en utilisant les valeurs par défaut définies par le thème, même si l'utilisateur ne visite jamais la page Paramètres du thème. Et si l'utilisateur n'enregistre jamais aucun paramètre, le thème n'écrit jamais même une entrée de base de données pour ses options.