web-dev-qa-db-fra.com

Paramètres de personnalisation dans les tableaux

Bonne après-midi.

J'utilise le personnalisateur de thème pour permettre à l'utilisateur de sélectionner les pages à afficher sur la page d'accueil. J'ai fait cela en utilisant un tableau dans le nom du paramètre:

$wp_customize->add_setting( 'learn_more[0]' , array(
    'default'     => 1
) );
$wp_customize->add_setting( 'learn_more[1]' , array(
    'default'     => 1
) );
$wp_customize->add_setting( 'learn_more[2]' , array(
    'default'     => 1
) );

Je crée ensuite un contrôle pour chacun.

Dans mon modèle front-page.php, j'utilise ensuite get_theme_mod('learn__more') pour fournir un tableau de pages à rechercher dans une boucle personnalisée.

Ça fonctionne parfaitement. Sauf...

J'ai réduit le nombre d'éléments que je veux de 4 à 3. Mais, le quatrième élément est maintenant stocké dans la base de données. Ainsi, chaque fois que j'utilise le get_theme_mod, il retourne un tableau de 4 éléments. En conséquence, la boucle dans mon front-page.php affiche 4 éléments.

Y a-t-il un moyen de résoudre ce problème? Comment puis-je supprimer le 4ème élément de la base de données? Je peux voir une position future dans laquelle je souhaiterai ajuster le nombre via un paramètre du personnaliseur, mais cela provoquera ce problème à chaque fois que je modifie le nombre d'éléments.

Est-ce que quelqu'un a des idées intelligentes?

1
Jamie

La fonction get_theme_mod() fonctionne comme suit:

  • Il récupère la fonction get_theme_mods() sous le capot.
  • Cela retourne les données suivantes

    $theme_slug = get_option( 'stylesheet' );
    get_option( "theme_mods_{$theme_slug}" );
    

Ainsi, si vous effectuez une mise à niveau, écrivez une fonction de mise à niveau spécifique à cette version de votre plug-in ou de votre thème, qui utilise l'un des éléments suivants, où le nom est à nouveau récupéré via get_option( 'stylesheet' );:

  • delete_option( "mods_{$theme_name}" );
  • update_option( "theme_mods_{$theme_slug}", $mods );
0
kaiser