wake-up-neo.com

Customizer-Einstellungen in Arrays

Guten Tag.

Ich verwende den Theme-Customizer, um dem Benutzer die Auswahl der Seiten zu ermöglichen, deren Auszug auf der Startseite angezeigt werden soll. Ich habe dazu ein Array im Einstellungsnamen verwendet:

$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
) );

Ich erstelle dann jeweils ein Steuerelement.

In meiner front-page.php-Vorlage verwende ich dann get_theme_mod('learn__more'), um ein Array von Seiten bereitzustellen, nach denen in einer benutzerdefinierten Schleife gesucht werden kann.

Das funktioniert einwandfrei. Außer...

Ich habe die Anzahl der gewünschten Elemente von 4 auf 3 verringert. Das vierte Element ist jetzt in der Datenbank gespeichert, sodass es bei jeder Verwendung des Codes get_theme_mod ein Array mit 4 Elementen zurückgibt. Infolgedessen werden in der Schleife in meinem front-page.php 4 Elemente angezeigt.

Gibt es eine Möglichkeit, dies zu lösen? Wie kann ich den 4. Eintrag in der Datenbank löschen? Ich kann eine zukünftige Position sehen, an der ich die Nummer über eine Einstellung im Customizer anpassen möchte, aber dies führt dazu, dass dieses Problem jedes Mal auftritt, wenn ich die Anzahl der Elemente ändere.

Hat jemand clevere Ideen?

1
Jamie

Die Funktion get_theme_mod() funktioniert folgendermaßen:

  • Es ruft die Funktion get_theme_mods() unter der Haube ab.
  • Dies gibt die folgenden Daten zurück

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

Wenn Sie also ein Upgrade durchführen, schreiben Sie eine spezielle Upgrade-Funktion für die Version Ihres Plugins oder Themas, die eine der folgenden Methoden verwendet, wobei der Name erneut über get_option( 'stylesheet' ); abgerufen wird:

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