J'ai ce qui semble être un problème plutôt troublant avec la fonction get_theme_mod dans la dernière version de Wordpress. Seulement sur des serveurs particuliers (qui répondent à toutes les exigences de Wordpress), la fonction ne renverra pas la valeur enregistrée que je peux voir stockée dans la base de données. Cependant, si je spécifie une valeur par défaut pour la fonction, elle renverra toujours la valeur par défaut à partir du deuxième argument.
Je suis vraiment désemparé ici car les serveurs utilisent tous PHP 5.3 et plus que les versions requises de MySQL. Tous les environnements sont PHP et Apache avec rien d’avant ou entre les deux. Cela ne semble pas être une erreur constante, cela semble se produire uniquement sur des serveurs particuliers.
J'utilise l'API de personnalisation de thème Wordpress dans mon projet et les serveurs incriminés ont remarqué les choses suivantes:
De plus, aucun plug-in n'est installé ou activé, ce qui pourrait écraser les options du thème ou les empêcher de revenir. Ma seule conclusion est que cela se rapporte à une sorte de mise en cache de niveau hôte Web (APC peut-être) ou peut-être que Wordpress lui-même met en cache les options (je suppose que get_theme_mod) est mis en cache de la même manière que la fonction get_option est ailleurs.
Si vous avez besoin de code, faites le moi savoir ce que vous avez besoin (car je ne suis pas sûr).
Modifier **
J'ai fait un var_dump sur le contenu des fonctions get_theme_mod appelées et j'ai obtenu ce qui suit (je l'ai fait pendant un certain nombre de cas, mais pas tous). Les étiquettes devant les deux points servent à indiquer quelle valeur correspond à quoi.
Texture: string(4) "none"
Background Color: string(0) ""
Theme Color: string(7) "#FF0000"
Body Font: string(0) ""
Heading Font: string(0) ""
Par frustration, j’ai aussi essayé le code suivant et rien n’est retourné:
$options = get_option("theme_mods_aphrodite");
var_dump($options);
Le résultat que j'en tire est bool (false).
Une autre chose que j'ai essayée était d'utiliser le personnalisateur de thème par défaut Twenty Twelve et cela a fonctionné. Quelque chose dans mon thème détruit la ligne d'options et l'empêche de fonctionner. Mais ce qui est étrange, c’est que le thème avec lequel je rencontre des problèmes fonctionne généralement bien sur les autres serveurs que j’essaie, c’est seulement des incidents isolés et la table de base de données est intacte.
Edit # 2 **
Comme suggéré ci-dessous, j'ai collé le code de personnalisation de mon thème dans un autre thème (j'ai choisi Twenty Twelve car il fonctionne immédiatement) et il semble que mon code de registre casse le personnalisateur et je ne comprends pas pourquoi.
J'ai eu le même problème .. en utilisant type=option
et ensuite get_option
ne fonctionne pas non plus.
Tester avec un autre élément d'option et fonctionne .. et tester avec MYTHEMENAME_THEME_OPTION
sans le support pour l'élément et obtenu un tableau, donc je suppose que c'est la bonne façon.
Donc, juste un conseil pour ceux qui ont trouvé ce post mais qui ont toujours une valeur vide .. quand vous utilisez ce code:
$wp_customize->add_setting('mytheme[mytext]', array(
'default' => 'some value you want default',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('textControl', array(
'label' => __('LabelText', 'mytheme'),
'section' => 'parameters_thrive',
'settings' => 'mytheme[mytext]', ));
alors pour obtenir du travail, vous devez utiliser chaque paramètre comme valeur individuelle,
$wp_customize->add_setting('mytext', array(
'default' => 'some value you want default',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('textControl', array(
'label' => __('LabelText', 'mytheme'),
'section' => 'parameters_thrive',
'settings' => 'mytext', ));
Où setting = myText
, then n'est plus un tableau (avant wasmytheme[mytext]
), ressemble maintenant à un élément/valeur unique, une chaîne. Continuez et utilisez la fonction get_option()
pour utiliser la valeur comme vous le souhaitez.
Je n'ai jamais compris pourquoi get_theme_mod ne fonctionnait pas, mais j'ai néanmoins trouvé un petit correctif astucieux pour résoudre ce problème de bogue ennuyeux au cas où quelqu'un d'autre se retrouverait dans une situation similaire.
Vous devez changer tous vos paramètres pour taper => 'option', vous ne pourrez plus utiliser get_theme_mod et vous devrez utiliser get_option (pour autant que je sache). Trouver et remplacer sur get_theme_mod pour get_option ne devrait pas faire de mal. Cela a fonctionné pour moi.
Je mettrai à jour ceci si je trouve un meilleur moyen.
Si vous utilisez ce code:
$wp_customize->add_setting('mytheme[mytext]', array(
'default' => 'some value you want default',
'capability' => 'edit_theme_options',
'type' => 'option',
));
$wp_customize->add_control('textControl', array(
'label' => __('LabelText', 'mytheme'),
'section' => 'parameters_thrive',
'settings' => 'mytheme[mytext]', ));
Vous pouvez récupérer la valeur en exécutant simplement get_option('mytheme')['mytext']