7

私は次の問題に直面しています:

以前は、すべてのスタイルをテーマオプションページに保持していました。ユーザーが保存ボタンをクリックすると、各ページにインラインで出力されないように変更を加えたcssファイルを生成するバックエンドスクリプトがありました。これには、キャッシングなど、多くの利点があります。

テーマカスタマイザーに切り替えましたが、「保存」ボタンに接続する方法が見つからないことを除いて、すべて問題ありません。バックエンドでそのボタンがクリックされたときにcssファイルのコンテンツを更新する関数をトリガーしたいと思います。

これも可能ですか?

ありがとう !

4

4 に答える 4

12

WordPress 3.6.0 以降、 を呼び出すことができるようになり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' );
?>

詳細: http://developer.wordpress.org/reference/hooks/customize_save_after/

于 2014-07-21T14:22:11.307 に答える
5

私は同じ状況に直面しています。Customize_save は、オプションが保存される前に機能するので、それは問題ありません。私はそれについて Otto (ottodestruct.com) にメールしました。

私が今持っている解決策は次のとおりです。

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');
    }
}

また、追加の checkCSSRegen(); を追加します。私のcustomize_controls_init関数に。

繰り返しますが、これはちょっとしたハックです。残念ながら、それは私がその時点でできる最善のことです。

別のオプションは、php ファイルを ping するだけの ajax 応答を使用することです。それはこれよりもハックのように感じます。

別の簡単なハックは、保存ボタンがクリックされたときに、コンパイルを実行する PHP ファイルへの呼び出しを遅らせるようにタイマーを設定する JavaScript アクションを実行することです。それは私にとって非常にハックです。

上記の唯一のフォールバックは、カスタマイザーがリロードされるか、別の値が保存されない限り、必要なすべての値を取得できない可能性があることです。

他の誰かがより良いアイデアを持っていますか?

** 更新 ** 次のリクエストを Wordpress チームに追加しました。うまくいけば、そこに押し込めるでしょう。

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

* Update 2 * Customize_save_after として 3.6 リリースになるようです。いくつかのツイートとサンプル コードがあれば、Wordpress チームと一緒に何かを実現できると思います。;)

于 2013-05-21T21:32:41.043 に答える
4

@Dovy で既に説明されているcustomize_save_afterように、今すぐフックしてこれを行うことができます。

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

設定をファイルに保存する場合、@otto によるhttp://ottopress.com/2011/tutorial-using-the-wp_filesystem/で説明されているsavesettingsように、ネイティブの php ファイル関数 ( など) を使用してこれを行うことはお勧めできません。file_put_contents()

ファイル保存の解決策は、wp_filesystem を使用することです。wp_filesystem を使用するには、ユーザーのファイル資格情報 (ftp) が必要です。

customize_save_afterAJAX リクエストで呼び出され、結果は表示されません。AJAX ハンドルが原因で、フォームの送信が必要なファイル資格情報をユーザーに要求できません。

解決策は、ファイル資格情報を wp-config.php に保存し、それらを (一時的に) データベースに追加することで見つけることができます。これを行うsavesettingsと、データベースから資格情報を読み取り、それらを使用して資格情報を使用してファイルを保存できます。(このソリューションについては、こちらで詳しく説明しています: https://wordpress.stackexchange.com/a/126631/31759 )

于 2013-12-27T14:42:30.990 に答える
0

テストされていませんが、 にアクション フックcustomize_saveがあり/wp-includes/class-wp-customize-manager.phpます。

関数内にありsave()ます:

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

このファイルには他にも興味深いアクション フック ( do_action) があり、チェックする価値があります。

于 2013-02-11T03:15:22.023 に答える