web-dev-qa-db-ja.com

register_setting()とadd_option()

私は最初のWordPressプラグインを作成しています。 add_option()関数を使ってwp_optionsテーブルに新しい行を作成するプラグインアクティベーションフックにカスタム関数を追加しました。今、私はカスタム設定APIページを作成したいと思います、そして私は人々がregister_setting()関数を使用し、そしてそれらの関数などをレンダリングすることに気づきました、しかし私が知っているように、それはwp_optionsテーブルの中に行を作成しますか?それで、以前にregister_setting()をやったことがあるなら、私はまだadmin_initをフックしてそれらをadd_option()と呼ぶ必要がありますか?

4
Drzim Ti Miesto

それで、私が以前にregister_setting()をしたならば、私はまだadmin_initをフックしてそれらをadd_option()と呼ぶ必要がありますか?

はい。あなたが必要です。

デフォルト値を設定するためにadd_optionを追加することができます。 add_optionへの別の呼び出しは何もしません。しかし、register_setting()の考え方は単なるadd_option()以上のものです。

各設定には(一般、読み取り、書き込み、メディア、定義したページなど)などのコンテキストページがあり、データに対してアクションを実行できるコールバック関数を持つことができます。

詳細については 設定API を確認してください。


設定APIは大きな問題だと誰かが思うかもしれません。ところで、これはあなたがWordPressのコアから読むことができるものです。

File: wp-admin/includes/template.php
2: /**
3:  * Template WordPress Administration API.
4:  *
5:  * A Big Mess. Also some neat functions that are nicely written.

wp-includes/option.php )に設定APIの一部もあります

反対側では、コーデックスの example を使うと早く起動することができます。

しかし、設定を扱うときは、深く掘り下げて考えられるエラーをカバーする必要があります。したがって、設定がどのように機能するかを理解する必要があります。

これは最初のプラグインを書き始めるWordPressプログラマーにとっては難しいかもしれません。数日かかる場合があります。

WordPress 4.7では、Settings APIが更新されましたが、これはSettings APIが将来レベルアップされる可能性があるという事実を交渉するものではありません。

思い出すと、例えばセクションを作成するときに異なるHTML要素を選択するのは難しいです。

File: wp-admin/includes/template.php
1286: function do_settings_sections( $page ) {
1287:   global $wp_settings_sections, $wp_settings_fields;
1288: 
1289:   if ( ! isset( $wp_settings_sections[$page] ) )
1290:       return;
1291: 
1292:   foreach ( (array) $wp_settings_sections[$page] as $section ) {
1293:       if ( $section['title'] )
1294:           echo "<h2>{$section['title']}</h2>\n";
1295: 
1296:       if ( $section['callback'] )
1297:           call_user_func( $section['callback'], $section );
1298: 
1299:       if ( ! isset( $wp_settings_fields ) || !isset( $wp_settings_fields[$page] ) || !isset( $wp_settings_fields[$page][$section['id']] ) )
1300:           continue;
1301:       echo '<table class="form-table">';
1302:       do_settings_fields( $page, $section['id'] );
1303:       echo '</table>';
1304:   }
1305: }

Settings APIの問題を見たとき、このAPIは古くなっています。


何が改善の可能性があります。疑似言語Settings APIを使ってこのようにフォームを定義するだけです。

   ---
   name: cool-settings.php
   style: default            
   ---
   textfield: First Name|first-name
   textfield: Last Name|last-name
   textarea: About Yourself|about
   image: Your Image|image|(.gif|.jpg|.jpeg|.png)

私はJekyllからこの構文を見ました。

1
prosti