Haken Sie sich in die Speicheraktion WordPress Theme Customizer ein

Lesezeit: 4 Minuten

Ich stehe vor folgendem Problem:

Früher habe ich das gesamte Styling auf einer Themenoptionsseite beibehalten. Als der Benutzer auf die Schaltfläche „Speichern“ klickte, hatte ich ein Backend-Skript, das eine CSS-Datei mit den Änderungen generierte, sodass sie nicht auf jeder Seite inline ausgegeben werden. Dies hat viele Vorteile, darunter Caching.

Ich habe zum Theme Customizer gewechselt und alles ist in Ordnung, außer dass ich keine Möglichkeit finde, mich in die Schaltfläche “Speichern” einzuklinken. Ich möchte eine Funktion auslösen, die den Inhalt der CSS-Datei aktualisiert, wenn im Backend auf diese Schaltfläche geklickt wird.

Ist das überhaupt möglich?

Vielen Dank !

Seit WordPress 3.6.0 kann man jetzt anrufen customize_save_after.

<?php
function emailAdmin(){
    mail('your@email', 'Woza!', 'You won\'t believe this but someone has updated the theme customizations!!');
}
add_action( 'customize_save_after', 'emailAdmin' );
?>

Mehr Info: http://developer.wordpress.org/reference/hooks/customize_save_after/

  • Ich habe diesen Haken dazu verwendet get_theme_mod Wert des Steuerelements, aber es gibt keinen Wert zurück. was falsch?

    – huykon225

    27. Juni 2017 um 8:16 Uhr

Benutzer-Avatar
Dovy

Ich stehe vor der gleichen Situation. Das customize_save funktioniert, BEVOR die Optionen gespeichert werden, also ist das raus. Ich habe Otto (ottodestruct.com) darüber eine E-Mail geschickt.

Die Lösung, die ich gerade habe, ist folgende:

add_action('customize_save', 'regenCSS', 100);
function regenCSS( $wp_customize ) {
    checkCSSRegen(); // Checks if I need to regen and does so
    set_theme_mod('regen-css', time()+3); // Waits 3 seconds until everything is saved
}
function checkCSSRegen() {
    if (get_theme_mod('regen-css') != "" && get_theme_mod('regen-css') < time()) {
        makecss();
        remove_theme_mod('regen-css');
    }
}

Ich füge auch ein zusätzliches checkCSSRegen(); zu meiner customize_controls_init-Funktion.

Auch dies ist ein kleiner Hack. Leider ist es das Beste, was ich zur Zeit tun kann.

Eine andere Option wäre die Verwendung einer Ajax-Antwort, die nur eine PHP-Datei pingt. Das fühlt sich noch mehr wie ein Hack an.

Ein weiterer schneller Hack wäre eine Javascript-Aktion, die beim Klicken auf die Schaltfläche Speichern einen Timer setzt, um einen Aufruf einer PHP-Datei zu verzögern, die die Kompilierung ausführt. Das ist für mich SEHR hacky.

Der einzige Fallback des oben Gesagten ist, dass Sie möglicherweise nicht alle gewünschten Werte erhalten, es sei denn, der Customizer wird neu geladen oder ein anderer Wert gespeichert.

Hat noch jemand eine bessere Idee?

** Update ** Ich habe gerade die folgende Anfrage an das WordPress-Team hinzugefügt. Hoffentlich bekommen wir es da reingequetscht.

http://wordpress.org/ideas/topic/do-customize_save-action-hook-after-the-settings-are-saved?replies=3#post-24853

*Update 2*
Sieht so aus, als ob es in Version 3.6 unter customize_save_after sein wird. Schätzen Sie, ein paar Tweets und Beispielcode können sogar mit dem WordPress-Team etwas bewirken. 😉

  • Im Theme Customizer würden Sie also so etwas tun: do_action(‘generate_css’, ‘customize_save_after’, 99); — scheint das richtig zu sein?

    – Imperativ

    21. Juli 2013 um 10:34 Uhr


  • Hinweis: Wenn Sie einen dedizierten mySQL-Server haben, funktioniert dies nicht direkt, da die Anfragen noch nicht vom DB-Server verarbeitet werden. Ich habe sleep(1) als erste Funktion in der check-Methode verwendet, sodass Sie sicher sein können, dass dies funktioniert, nachdem die DB ihre anderen Anfragen bearbeitet hat. Diese Problemumgehung ist nur erforderlich, wenn Sie einen vollständig dedizierten DB-Server haben und die Methoden nicht zu funktionieren scheinen.

    – Gkiokan

    19. April 2017 um 6:39 Uhr

  • Seite speichert keine Daten, wenn dieser Hook verwendet wird. Ich habe einen Fehler beim Laden von admin-ajax.php gesehen. Was ist das für ein Problem?

    – huykon225

    21. Juli 2017 um 9:36 Uhr

Benutzer-Avatar
Bass Jobsen

Wie von @Dovy bereits beschrieben, kann man einhaken customize_save_after um das jetzt zu tun:

do_action('customize_save_after', 'savesettings', 99);

Wann savesettings Einstellungen in einer Datei speichern, ist es eine schlechte Praxis, dies mit nativen PHP-Dateifunktionen (wie file_put_contents()) wie hier beschrieben: http://ottopress.com/2011/tutorial-using-the-wp_filesystem/ von @otto.

Die Lösung für das Speichern von Dateien ist die Verwendung von wp_filesystem. Um wp_filesystem zu verwenden, benötigen Sie die Dateianmeldeinformationen (ftp) des Benutzers.

customize_save_after wird in einer AJAX-Anfrage aufgerufen und das Ergebnis ist nicht sichtbar. Aufgrund des AJAX-Handles können Sie den Benutzer nicht nach den Dateianmeldeinformationen fragen, was eine Formularübermittlung erfordert.

Eine Lösung kann gefunden werden, indem die Anmeldeinformationen der Datei in wp-config.php gespeichert und (temporär) zur Datenbank hinzugefügt werden. Dies tun savesettings kann die Anmeldeinformationen aus der Datenbank lesen und sie verwenden, um die Datei mithilfe von Anmeldeinformationen zu speichern. (diese Lösung wird hier genauer beschrieben: https://wordpress.stackexchange.com/a/126631/31759)

  • Ich habe versucht, diesen Hook zu verwenden, um den Wert der Einstellungssteuerung zu erhalten, um weniger in CSS zu kompilieren. Ich benutze Get Theme Mod, um es zu bekommen, aber es gibt immer den Wert 0 zurück, wenn es kompiliert wird. Was falsch?

    – huykon225

    27. Juni 2017 um 8:22 Uhr

  • Seite speichert keine Daten, wenn dieser Hook verwendet wird. Ich habe einen Fehler beim Laden von admin-ajax.php gesehen. Was ist das für ein Problem?

    – huykon225

    21. Juli 2017 um 9:36 Uhr

Nicht getestet, aber es gibt den Aktionshaken customize_save in /wp-includes/class-wp-customize-manager.php.

Es ist in der save() Funktion:

/**
 * Switch the theme and trigger the save action of each setting.
 *
 * @since 3.4.0
 */

Es gibt einige andere interessante Action-Hooks (do_action) in dieser Datei, die eine Überprüfung wert sein könnte.

1384210cookie-checkHaken Sie sich in die Speicheraktion WordPress Theme Customizer ein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy