Pourquoi get_theme_mod
renvoie-t-il un blanc (ou la valeur par défaut si spécifié) alors que get_option
renvoie la valeur correcte (enregistrée)?
J'ai un sélecteur de couleur dans le programme de personnalisation color-primary
qui fonctionne correctement et enregistre la valeur sélectionnée dans la base de données. Cependant, get_theme_mod
renvoie un champ vide alors que get_option
renvoie la valeur enregistrée.
echo get_option('color-primary'); //returns saved value
echo get_theme_mod('color-primary'); // returns blank
echo get_theme_mod('color-primary', '#fafafa'); // returns default value
C'est le code original de wordpress:
function get_theme_mods()
{
$theme_slug = get_option('stylesheet');
$mods = get_option("theme_mods_$theme_slug");
if (false === $mods)
{
$theme_name = get_option('current_theme');
if (false === $theme_name)
$theme_name = wp_get_theme()->get('Name');
$mods = get_option("mods_$theme_name"); // Deprecated location.
if (is_admin() && false !== $mods)
{
update_option("theme_mods_$theme_slug", $mods);
delete_option("mods_$theme_name");
}
}
return $mods;
}
function get_theme_mods()
{
$theme_slug = get_option('stylesheet');
$mods = get_option("theme_mods_$theme_slug");
if (false === $mods)
{
$theme_name = get_option('current_theme');
if (false === $theme_name)
$theme_name = wp_get_theme()->get('Name');
$mods = get_option("mods_$theme_name"); // Deprecated location.
if (is_admin() && false !== $mods)
{
update_option("theme_mods_$theme_slug", $mods);
delete_option("mods_$theme_name");
}
}
return $mods;
}
Comme vous pouvez le constater, get_theme_mods
utilise get_option
, mais il n'utilise pas la clé que vous avez fournie pour enregistrer vos données, mais utilise votre nom de thème comme clé pour extraire ou enregistrer vos données de thème. Maintenant, si vous récupérez des données avec get_theme_mod()
, il va commencer par get_option("theme_mods_$yourthemename")
, puis il analysera la valeur renvoyée à l'emplacement actuel des options de votre thème enregistré.