[wp-trac] [WordPress Trac] #21488: Add Default Callback Functions for add_settings_field()

WordPress Trac wp-trac at lists.automattic.com
Sun Aug 5 23:33:26 UTC 2012


#21488: Add Default Callback Functions for add_settings_field()
-------------------------+------------------------------
 Reporter:  mordauk      |       Owner:
     Type:  enhancement  |      Status:  new
 Priority:  normal       |   Milestone:  Awaiting Review
Component:  General      |     Version:
 Severity:  normal       |  Resolution:
 Keywords:  has-patch    |
-------------------------+------------------------------
Description changed by scribu:

Old description:

> By default, when creating options in plugins and themes, every developer
> is required to create custom callback functions for rendering their
> option's HTML. The HTML for most options is nothing more than a standard
> INPUT field, a SELECT field, TEXTAREA field, etc, so there's really no
> reason there shouldn't be default callback options in place.
>
> For example, if I have a plugin that registers one text field option in
> the General settings page, it really doesn't make sense that I should be
> forced to create a callback function, especially not when probably 99% of
> all text fields are outputted in exactly the same way:
>
> {{{
> <input name="FIELD NAME" id="FIELD ID" value="FIELD VALUE" class
> ="regular-text"/>
> <div class="description">The description of the field (if present)</div>
> }}}
>
> With default field callbacks available, developers can do this:
>

> {{{
> function pw_register_settings() {
>         register_setting( 'general', 'pw_sample_option', 'esc_attr' );
>         add_settings_section( 'pw_sample_section', 'This is a Sample
> Section', 'pw_sample_section_cb', 'general');
>         add_settings_field( 'pw_sample_option', 'A Sample Setting',
> 'text', 'general', 'pw_sample_section', array( 'description' => 'The
> field description' ) );
> }
> add_action('admin_init', 'pw_test_settings');
>
> function pw_sample_section_cb() {
>         // this is the section HTML (if you want it)
> }
> }}}
>
> This is much simpler than also having to write the callback function to
> render the HTML for the option.
>
> The patch attached adds the following default callbacks:
>
> * text
> * textarea
> * select
> * radio
> * checkbox
> * checkbox_group
>
> For select, radio, and checkbox groups, the options are passed as an
> array of "choices" in the last, optional $args parameter for
> add_settings_field():
>
> {{{
> $options = array(
>         'one' => 'The Choice Name',
>         'two' => 'The Second name',
>         'three' => 'The Third option'
> );
> add_settings_field( 'pw_sample_option', 'A Sample Setting', 'select',
> 'general', 'pw_sample_section', array( 'choices' => $options,
> 'description' => 'This is a select' ) );
>
> }}}
>
> When a user wants to create a custom callback function, this is still
> allowed as call_user_func() is the default in the $field['callback']
> switch statement for the do_settings_fields() function.

New description:

 By default, when creating options in plugins and themes, every developer
 is required to create custom callback functions for rendering their
 option's HTML. The HTML for most options is nothing more than a standard
 INPUT field, a SELECT field, TEXTAREA field, etc, so there's really no
 reason there shouldn't be default callback options in place.

 For example, if I have a plugin that registers one text field option in
 the General settings page, it really doesn't make sense that I should be
 forced to create a callback function, especially not when probably 99% of
 all text fields are outputted in exactly the same way:

 {{{
 <input name="FIELD NAME" id="FIELD ID" value="FIELD VALUE" class="regular-
 text"/>
 <div class="description">The description of the field (if present)</div>
 }}}

 With default field callbacks available, developers can do this:


 {{{
 function pw_register_settings() {
         register_setting( 'general', 'pw_sample_option', 'esc_attr' );
         add_settings_section( 'pw_sample_section', 'This is a Sample
 Section', 'pw_sample_section_cb', 'general');
         add_settings_field( 'pw_sample_option', 'A Sample Setting',
 'text', 'general', 'pw_sample_section', array( 'description' => 'The field
 description' ) );
 }
 add_action('admin_init', 'pw_test_settings');

 function pw_sample_section_cb() {
         // this is the section HTML (if you want it)
 }
 }}}

 This is much simpler than also having to write the callback function to
 render the HTML for the option.

 The patch attached adds the following default callbacks:

 * text
 * textarea
 * select
 * radio
 * checkbox
 * checkbox_group

 For select, radio, and checkbox groups, the options are passed as an array
 of "choices" in the last, optional $args parameter for
 add_settings_field():

 {{{
 $options = array(
         'one' => 'The Choice Name',
         'two' => 'The Second name',
         'three' => 'The Third option'
 );
 add_settings_field( 'pw_sample_option', 'A Sample Setting', 'select',
 'general', 'pw_sample_section', array( 'choices' => $options,
 'description' => 'This is a select' ) );

 }}}

 When a user wants to create a custom callback function, this is still
 allowed as call_user_func() is the default in the `$field['callback']`
 switch statement for the do_settings_fields() function.

--

-- 
Ticket URL: <http://core.trac.wordpress.org/ticket/21488#comment:3>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list