it-swarm.com.de

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

Ich habe ein ziemlich problematisches Problem mit der Funktion get_theme_mod in der neuesten Version von Wordpress. Nur auf bestimmten Servern (von denen alle Wordpress-Anforderungen erfüllt sind) gibt die Funktion nicht den gespeicherten Wert zurück, der in der Datenbank gespeichert ist. Wenn ich jedoch einen Standardwert für die Funktion festlege, wird immer der Standardwert aus dem zweiten Argument zurückgegeben.

Ich bin hier wirklich ratlos, weil auf allen Servern PHP 5.3 und mehr als die erforderlichen MySQL-Versionen ausgeführt werden. Alle Umgebungen sind PHP und Apache mit nichts davor oder dazwischen. Dies scheint kein konsistenter Fehler zu sein, sondern nur auf bestimmten Servern.

Ich verwende die Wordpress Theme Customization API in meinem Projekt und habe auf den betroffenen Servern die folgenden Dinge bemerkt:

  • Wenn Sie Änderungen im Vorschaufenster der Designanpassungs-API vornehmen, werden diese wiedergegeben. Wenn Sie jedoch im Vorschaufenster zu einem anderen Teil der Site navigieren (auf einen Link klicken oder so weiter), wird der Standardwert wiederhergestellt. Wenn Sie auf "Aktualisieren" klicken, wird auch alles auf die Standardwerte zurückgesetzt.
  • Die Überprüfung der AJAX -Anforderung über den Tab "Netzwerk" der Chrome Developer Tools zeigt, dass die Daten korrekt gesendet werden und der Server einen Antwortcode von 200 zurücksendet, unter der Annahme, dass alles in Ordnung ist.
  • Die Überprüfung der entsprechenden Datenbanktabellenzeile, in der die gespeicherten serialisierten Daten gespeichert sind, zeigt, dass sie tatsächlich korrekt gespeichert wurden. Bei Verwendung der Funktion get_theme_mod () wird sie jedoch nicht zurückgegeben.
  • Ich habe versucht, den Inhalt aus der Funktion "Get_theme_mods ()" auszugeben, um zu sehen, was zurückgegeben wird, und ich erhalte nichts (absolut nichts wird zurückgegeben). Wenn Sie dies auf einem funktionierenden Server tun, werden jedoch die entsprechenden Inhalte zurückgegeben.
  • Alle Theme-Anpassungs-API-Werte sind gemäß den Vorschlägen in der Dokumentation definiert, und ich habe sogar versucht, den Einstellungstyp auf "theme_mod" ohne Erfolg zu setzen (obwohl theme_mod ohnehin die Standardeinstellung ist).
  • Wenn ich versuche, get_theme_mod () aufzurufen, wenn ich set_theme_mod vor dem Funktionsaufruf hinzufüge und selbst einen Wert manuell festlege, wird dieser gespeichert und die get_theme_mod-Funktion erhält den Wert, der unmittelbar davor gespeichert wurde. Dies bedeutet, dass sich Änderungen so verhalten, als würden sie nur vorübergehend gespeichert (obwohl die Datenbank etwas anderes angibt).

Ich habe auch keine Plugins installiert oder aktiviert, die eine der Themenoptionen überschreiben oder deren Rückgabe verhindern könnten. Meine einzige Schlussfolgerung ist, dass es sich um eine Art Webhost-Level-Caching (vielleicht APC) handelt oder dass Wordpress selbst die Optionen zwischenspeichert (ich nehme an, get_theme_mod), ähnlich wie die Funktion get_option an anderer Stelle.

Wenn Sie einen Code benötigen, teilen Sie mir einfach Ihre Anforderungen mit (da ich nicht sicher bin).

Bearbeiten **

Ich habe einen var_dump über den Inhalt der get_theme_mod-Funktionen durchgeführt, die aufgerufen wurden, und Folgendes erhalten (habe es für einige, nicht alle, getan). Die Bezeichnungen vor 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 Frust habe ich auch den folgenden Code ausprobiert und es wird nichts zurückgegeben:

$options = get_option("theme_mods_aphrodite");

var_dump($options);

Das Ergebnis ist bool (false).

Eine andere Sache, die ich versucht habe, war die Verwendung des standardmäßigen Twenty Twelve Theme-Customizers, und es hat funktioniert. Irgendwo in meinem Theme wird also die Optionszeile zerstört und verhindert, dass sie funktioniert. Aber was das seltsam macht, ist, dass das Thema, mit dem ich Probleme habe, auf anderen Servern, die ich versuche, größtenteils funktioniert. Es handelt sich nur um einzelne Vorfälle, und die Datenbanktabelle ist inaktuell.

Edit # 2 **

Wie unten vorgeschlagen, habe ich meinen Designanpassungscode in ein anderes Design eingefügt (ich habe Twenty Twelve ausgewählt, weil es nicht in Ordnung ist) und es scheint, dass mein Registrierungscode den Anpassungscode bricht und ich kann nicht herausfinden, warum.

4

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

Testen mit einer anderen Option und funktioniert .. und Testen mit MYTHEMENAME_THEME_OPTION ohne die Klammer für item 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 einen leeren Wert haben. 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 ist, ist kein Array (vor wasmytheme[mytext]) mehr wie ein einzelnes Element/ein einzelner Wert, eine Zeichenfolge. Verwenden Sie die Funktion get_option(), um den gewünschten Wert zu verwenden.

3
user39067

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

Sie müssen alle Ihre Einstellungen auf type => 'option' ändern und dann können Sie get_theme_mod nicht mehr verwenden und müssen stattdessen get_option verwenden (soweit ich weiß). Ein Suchen und Ersetzen auf get_theme_mod bis get_option sollte nicht schaden. Es hat bei mir funktioniert.

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

2

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 einfach get_option('mytheme')['mytext'] ausführen.