web-dev-qa-db-ja.com

古いget_theme_mod($ name)と新しいget_theme_mod($ name)の戻り値を比較してください。

私は自分のコードでこの種の検証をしたいです。

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

そのコードはテーマのAppearance -> Customize「保存して公開」ボタンを押した後に実行されます。これを達成するための正しい方法はありますか?

1
5ervant

私が見つけた解決策の1つは、集合get_theme_mod($name)をPHP $_SESSION["$name"]に格納することです。セッションが存在する場合は、新しいget_theme_mod($name)と古い$_SESSION["$name"]を比較します。それらが同じでない場合は// 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');
        }
    }
}

しかし、それは少し厄介です、管理者はそれ自身のサイトを訪問するか、または検証を実行するためにrefresh設定トランスポートを実行する必要があります。

0
5ervant