Problem mit get_theme_mod, das einen leeren Wert anstelle des gespeicherten Werts zurückgibt

Ich habe etwas, was mit der function “get_theme_mod” in der neuesten Version von WordPress ein Problem zu sein scheint. Nur auf bestimmten Servern (von denen alle WordPress-Anforderungen erfüllen) wird die function den gespeicherten Wert nicht zurückgeben, den ich in der database gespeichert sehe. Wenn ich jedoch einen Standardwert für die function festlege, wird immer der Standardwert vom zweiten Argument zurückgegeben.

Ich bin wirklich ratlos, weil auf den Servern PHP 5.3 und mehr als die benötigten MySQL-Versionen laufen. Alle Umgebungen sind PHP und Apache mit nichts in-front oder dazwischen. Dies scheint kein konsistenter Fehler zu sein, nur auf bestimmten Servern scheint dies zu geschehen.

Ich benutze die WordPress Theme Customization API in meinem Projekt und auf den problematischen Servern sind folgende Dinge aufgefallen:

  • Wenn Sie Änderungen im Vorschaubereich der Benutzeroberfläche für die Themenanpassung vornehmen, werden diese reflektiert. Wenn Sie jedoch im Vorschaufenster zu einem anderen Teil der Site navigieren (durch Klicken auf einen Link oder eine Verknüpfung), wird der Standardwert wiederhergestellt. Hitting Refresh setzt auch alles auf seine Standardwerte zurück.
  • Überprüfung der AJAX-Anforderung über die Registerkarte “Netzwerk” von Chrome Developer Tools zeigt an, dass die Daten korrekt gesendet werden und der Server einen Antwortcode von 200 zurücksendet, der darauf hinweist, dass alles in Ordnung ist.
  • Die Überprüfung der entsprechenden databasetabellenzeile, in der die gespeicherten serialisierten Daten gespeichert sind, zeigt, dass sie tatsächlich korrekt gespeichert wird. Bei Verwendung der function get_theme_mod () wird sie jedoch nicht zurückgegeben.
  • Ich habe versucht, den Inhalt aus der function “Get_theme_mods ()” auszugeben, um zu sehen, was es zurückgeben würde, und ich bekomme nichts (absolut nichts wird zurückgegeben). Wenn Sie dies auf einem funktionierenden Server tun, wird jedoch der entsprechende Inhalt zurückgegeben.
  • Alle API-Werte für die Theme-Anpassung sind wie in der Dokumentation vorgeschlagen definiert und ich habe sogar versucht, den Einstellungstyp auf “theme_mod” zu setzen, ohne Erfolg (obwohl theme_mod sowieso der Standard ist).
  • Wenn ich versuche, das get_theme_mod () aufzurufen, wenn ich vor dem functionsaufruf ein set_theme_mod hinzufüge und einen Wert manuell selbst festlege, speichert es und die function get_theme_mod erhält den Wert, der gerade davor gespeichert wurde. Das bedeutet, dass Änderungen sich so verhalten, als würden sie nur vorübergehend gespeichert (obwohl die DB etwas anderes sagt).

Ich habe auch keine Plugins installiert oder aktiviert, die eine der Themenoptionen überschreiben oder verhindern könnten, dass sie zurückgegeben werden. Meine einzige Schlussfolgerung ist, dass es sich um irgendeine Art von Caching auf Web-Host-Ebene handelt (APC vielleicht) oder vielleicht WordPress selbst die Optionen zwischenspeichert (ich vermute, get_theme_mod) wird ähnlich wie die get_option-function an anderer Stelle zwischengespeichert.

Wenn Sie einen Code benötigen, lassen Sie mich wissen, was Sie benötigen (wie ich nicht sicher bin).

Bearbeiten **

Ich habe einen var_dump auf den Inhalt der get_theme_mod functionen, die aufgerufen werden, und habe das folgende (hat es für einige, nicht alle von ihnen). Die Etiketten vorne mit dem Doppelpunkt zeigen an, welcher Wert was ist.

Texture: string(4) "none" Background Color: string(0) "" Theme Color: string(7) "#FF0000" Body Font: string(0) "" Heading Font: string(0) "" 

Aus Frustration habe ich auch den folgenden Code ausprobiert und nichts kommt zurück:

 $options = get_option("theme_mods_aphrodite"); var_dump($options); 

Das Ergebnis, das ich daraus bekomme, ist bool (falsch).

Eine andere Sache, die ich ausprobierte, war die Verwendung des Standard Twenty Twelve Theme-Customizers, und es funktionierte, so dass etwas in meinem Design die Optionszeile zerstört und verhindert, dass sie funktioniert. Aber was das merkwürdig macht ist, dass das Thema, mit dem ich Probleme habe, auf anderen Servern, die ich versuche, gut funktioniert, es sind nur bestimmte isolierte Vorfälle und die databasetabelle ist intakt.

Bearbeiten # 2 **

Wie unten vorgeschlagen, habe ich meinen Themenkodierungscode in ein anderes Thema eingefügt (ich habe Twenty Twelve ausgewählt, weil es sofort funktioniert) und es scheint, dass mein Registercode den Customizer zerstört und ich nicht herausfinden kann, warum.

Solutions Collecting From Web of "Problem mit get_theme_mod, das einen leeren Wert anstelle des gespeicherten Werts zurückgibt"

Ich hatte das gleiche Problem .. mit type=option und dann get_option funktioniert auch nicht.

Testen mit einem anderen Optionselement und funktioniert .. und Testen mit MYTHEMENAME_THEME_OPTION ohne die Klammer für Element und bekam ein Array, also denke ich, ist der richtige Weg.

Also nur ein Tipp für diejenigen, die diesen Beitrag gefunden haben, aber immer noch leerer Wert .. wenn Sie diesen Code verwenden:

 $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]', )); 

Um Arbeit zu bekommen, müssen Sie jede Einstellung als individuellen Wert verwenden.

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

Wo setting = myText , dann ist nicht mehr ein Array (vor wasmytheme[mytext] ) ist jetzt wie ein einzelnes Element / Wert, eine Zeichenfolge. Gehen Sie voran und verwenden Sie die function get_option() , um den Wert zu verwenden, was auch immer Sie wollen.

Ich habe nie herausgefunden, warum get_theme_mod nicht funktioniert hat, aber ich habe einen kleinen Fehler gefunden, um diesen nervigen Fehler zu beheben, falls sich jemand anders in einer ähnlichen Situation befindet.

Du musst alle deine Einstellungen ändern, um = = ‘option’ zu geben und dann kannst du get_theme_mod nicht mehr benutzen und stattdessen get_option benutzen (soweit ich weiß). Ein Finden und Ersetzen von get_theme_mod zu get_option sollte nicht schaden. Es hat für mich funktioniert.

Ich werde dies aktualisieren, wenn ich einen besseren Weg finde.

Wenn Sie diesen Code verwenden:

 $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]', )); 

Sie können den Wert abrufen, indem Sie get_option('mytheme')['mytext'] ausführen get_option('mytheme')['mytext']