私は様々なオプションを持つプラグインを書きました、そしてユーザーがこのオプションを保存する場合CSSファイルが生成されます。私の意図は、CSSはオプションが保存されたときにのみ作成され、誰かがページにアクセスしたときには作成されず、CSSは毎回作成されることです。
だから私は誰かがオプションを保存するときに起動するフックが必要です。私はこれを試してみました:
public function __construct( $file ) {
$this->options = get_option('clb_plugin_options');
add_filter( 'pre_update_option_clb_plugin_options', array( $this, 'generate_options_css' ) );
}
public function generate_options_css() {
[doing all css related stuff)
return $this->options;
}
しかし、この場合、私がフォームに加えた変更を考慮に入れることはしません。私はオプションを$ this-> optionsにすでに保存しているからです。それでは、誰かがプラグインのオプションを保存した後にフックするにはどうすればいいですか?
私はあなたの目的に同意しませんが、ここであなたが使うかもしれないアクションフック(あなたはオプションを保存するためにあなたが使っているものを私たちに示していません。
add_option
を使うなら:add_option_ {option_name}:afterを実行します。_ "option_name"という名前のオプションがadd_option()
関数を使って追加されました。たとえば、 "foo"という名前のオプションの場合:
add_action('add_option_foo', function( $option_name, $option_value ) {
//....
}, 10, 2);
add_option:オプションをデータベースに追加するbeforeを実行します。例:
add_action('add_option', function( $option_name, $option_value ) {
//....
}, 10, 2);
added_option:オプションを追加したafterを実行します。例:
add_action('added_option', function( $option_name, $option_value ) {
//....
}, 10, 2);
delete_option()
のアナログアクションもあります:delete_option_{option_name}
、delete_option
およびdeleted_option
update_option
を使うなら:(update_option
は新しいオプションの保存/作成にも使用できます)
update_option_ {option_name}:afterを実行します。_ "option_name"という名前のオプションが更新されました。たとえば、 "foo"という名前のオプションの場合:
add_action('update_option_foo', function( $old_value, $value ) {
//....
}, 10, 2);
update_option:オプションを更新するbeforeを実行します。例:
add_action('update_option', function( $option_name, $old_value, $value ) {
//....
}, 10, 3);
updated_option:afterを実行し、オプションを更新しました。例:
add_action('updated_option', function( $option_name, $old_value, $value ) {
//....
}, 10, 3);
pdate_option_ {option_name}が設定の変更のフォローアップで1回だけ実行されなかったことを経験しました。
最後に、生成スクリプトをadd_options_pageコールバック関数に追加して解決しました。このように、オプションページが開かれた場合に生成されますが、オーバーヘッドは許容できるようです。