Problème avec get_theme_mod renvoyant une valeur vide à la place de la valeur enregistrée

4

J'ai un problème qui semble plutôt troublant avec la fonction get_theme_mod de 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 du second 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 ni 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:

  • Lorsque vous apportez des modifications dans le volet d'aperçu de l'API de personnalisation du thème, elles sont reflétées. Cependant, accédez à une autre partie du site dans le volet de visualisation (en cliquant sur un lien ou autre) pour revenir à sa valeur par défaut. Frapper rafraîchir remet également tout à ses valeurs par défaut.
  • L'inspection de la requête AJAX via les outils pour les développeurs Chrome, l'onglet "Réseau", indique que les données sont correctement envoyées et que le serveur renvoie un code de réponse de 200 indiquant que tout va bien.
  • L'inspection de la ligne appropriée de la table de la base de données qui stocke les données sérialisées qui ont été enregistrées montre que l'enregistrement est correct, mais lorsque vous utilisez la fonction get_theme_mod (), elles ne sont pas renvoyées.
  • J'ai essayé de vider le contenu de la fonction "Get_theme_mods ()" pour voir ce qu'il retournerait et je ne reçois rien (absolument rien n'est retourné). Cette opération sur un serveur en service renvoie toutefois le contenu approprié.
  • Toutes les valeurs de l'API de personnalisation de thème sont définies conformément à la documentation suggérée et j'ai même essayé de définir le type de paramètre sur "theme_mod", mais en vain (bien que theme_mod soit par défaut).
  • Lorsque j'essaie d'appeler get_theme_mod () si j'ajoute set_theme_mod avant l'appel de la fonction et que je définis moi-même une valeur manuellement, il enregistre et la fonction get_theme_mod obtient la valeur enregistrée juste avant. Cela signifie que les modifications semblent agir comme si elles n'étaient que temporairement enregistrées (même si la base de données dit le contraire).

Je n'ai également installé ni activé aucun plug-in qui pourrait écraser les options du thème ou les empêcher de revenir. Ma seule conclusion est qu’elle se rapporte à une sorte de mise en cache au niveau de l’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 (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 (l'a fait pour un certain nombre d'entre elles, mais pas toutes). 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 obtenu 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 la base de données est intacte.

Modifier n ° 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 d'enregistrement rompt le personnalisateur et je ne comprends pas pourquoi.

    
posée Dwayne Charrington 15.03.2013 - 01:23

3 réponses

3

J'ai eu le même problème .. utiliser type=option puis 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 crochet pour l'élément et obtenir un tableau, alors je suppose que c'est la bonne façon.

Donc, juste un conseil pour ceux qui ont trouvé ce message mais qui ont toujours une valeur vide .. lorsque 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 une 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',   ));

setting = myText , then n'est plus un tableau (avant wasmytheme[mytext] ) ressemble maintenant à un seul élément / valeur, une chaîne. Continuez et utilisez la fonction get_option() pour utiliser la valeur comme vous le souhaitez.

    
réponse donnée user39067 06.10.2013 - 03:43
2

Je n’ai jamais compris pourquoi get_theme_mod ne fonctionnait pas, mais j’ai trouvé un petit correctif astucieux pour résoudre ce bogue ennuyeux au cas où une autre personne se retrouverait dans une situation similaire.

Vous devez modifier tous vos paramètres pour taper = > 'option' et vous ne pouvez plus utiliser get_theme_mod et devez 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 vais le mettre à jour si je trouve un meilleur moyen.

    
réponse donnée Dwayne Charrington 15.03.2013 - 05:58
0

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']

    
réponse donnée Pablo Ezequiel Leone 18.09.2017 - 17:53

Lire d'autres questions sur les étiquettes