web-dev-qa-db-fra.com

Comparez l'ancien get_theme_mod ($ name) à la nouvelle valeur de retour get_theme_mod ($ name)

Je veux avoir ce genre de validation dans mon code:

if (/*OLD*/get_theme_mod($name) != /*NEW*/get_theme_mod($name)) {
    // do something..
}

Ce code s'exécutera après avoir appuyé sur le bouton "Enregistrer et publier" dans le Appearance -> Customize d'un thème. Y a-t-il un bon moyen d'y parvenir?

1
5ervant

L'une des solutions que j'ai trouvées consiste à stocker l'ensemble get_theme_mod($name) dans un PHP $_SESSION["$name"]. Si la session existe, comparez la nouvelle get_theme_mod($name) à cet ancien $_SESSION["$name"], si elles ne sont pas identiques, alors // do something..:

// Check if the user is an admin for validation to improve performance.
if (current_user_can( 'manage_options' )) {
    session_start();

    // If the session is not set, the OLD is not equal to the NEW.
    if (!isset($_SESSION['theme_mod_name']) {
        // do something..

        $_SESSION['theme_mod_name'] = get_theme_mod('theme_mod_name');
    } else {
        $theme_mod_name   = get_theme_mod('theme_mod_name');
        $theme_mod_name_s = $_SESSION['theme_mod_name'];

        // Check if the OLD is equal to the NEW.
        if ($theme_mod_name !== $theme_mod_name_s) {
            // do something..

            // Override the existing session for future validation.
            $_SESSION['theme_mod_name'] = get_theme_mod('theme_mod_name');
        }
    }
}

Mais il a un petit con, un administrateur doit visiter son propre site ou effectuer un transport de paramètre refresh pour effectuer la validation.

0
5ervant