Easily create plugin/theme settings page, custom fields metaboxes and term meta, and user meta settings.
This plugin is my attempt to simplify the process of adding a setting page for the WordPress themes I was working on. It was originally inspired by the Hybrid theme. I then re-wrote it to utilize the amazing WordPress' Settings API after reading Otto's article.
Currently you can use this plugin for these types of settings:
For plugin/theme setting pages, you have the option to choose between 'plain' and 'metaboxes' display types. For post metaboxes/custom fields and plugin/theme setting pages with display time set to metaboxes, you can freely set the metaboxes positions/contexts and priorities.
Supported input types:
text)textarea)file)date)color)checkbox)radio)select)multiselect)multiinput)special)If you think there are other input types that need to be added, don't hesitate to contact me!
Just install it like any other WordPress plugins :)
You can either create the settings using the Builder by going to Settings » KC Settings, or create them manually.
There are a few sample options files included in the sample directory. Copy (examine and modify) the sample options files included in the sample directory to your plugin/theme directory and then include them from your theme/plugin, eg. require_once TEMPLATEPATH . '/theme_options.php';
$var = kc_get_option( $prefix );
Or, you can also use WordPress' builtin function:
$var = get_option( 'prefix_settings' );
$var = kc_get_option( $prefix, $section_id );
$var = kc_get_option( $prefix, $section_id, $field_id );
If you have set a default value for your field, you can get it like this:
$var = kc_get_default( $type, $prefix, $section_id, $field_id );
Note:
For now, this only works for plugin/theme settings, so the $type argument should always be set to 'plugin'. $section_id and $field_id are optionals
string)string)array)string)string)array)string)string)array)array)mixed)Just use standard WordPress function, but prefix the meta key with an underscore, for example:
$var = get_post_meta( $post_id, '_field_id', true );
or:
$var = get_metadata( 'post', $post_id, '_field_id', true );
You can use standard WordPress function, for example:
$var = get_metadata( 'term', 'term_id', $field_id, true );
You can use standard WordPress function, for example:
$var = get_user_meta( 'user_id', $field_id, true );
or:
$var = get_metadata( 'user', 'user_id', $field_id, true );
All options are filtered before added to the database. You can add your own filter(s) by using one ore more of these filters:
kcv_setting_prefixadd_filter( 'kcv_setting_myPrefix', 'my_filter_function' );
function my_filter_function( $data ) {
// .... do something with the POST data
return $data;
}
kcv_setting_prefix_sectionIDadd_filter( 'kcv_setting_myPrefix_mySectionID', 'my_filter_function' );
function my_filter_function( $section_data ) {
// .... do something with the POST data
return $section_data;
}
kcv_setting_prefix_fieldTypeadd_filter( 'kcv_setting_myPrefix_textarea', 'my_filter_function' );
function my_filter_function( $field_data ) {
// .... do something with the POST data
return $field_data;
}
kcv_setting_prefix_sectionID_fieldIDadd_filter( 'kcv_setting_myPrefix_mySectionID_myFieldID', 'my_filter_function' );
function my_filter_function( $field_data ) {
// .... do something with the POST data
return $field_data;
}
You can also filter your metadata values using the filters below. Note that there are three arguments passed to these filters, and they're valid for the three metadata types (post, term and user):
$nu_val: The new metadata value from the user$section: The section array$field: The field arrayExample validation/sanitation function for metadata:
function my_filter_function( $nu_val, $section, $field ) {
//... do someting with the data
return $nu_val;
}
kcv_postmeta_postTypeadd_filter( 'kcv_postmeta_post', 'my_filter_function', 10, 3 );kcv_postmeta_postType_fieldTypeadd_filter( 'kcv_postmeta_post_textarea', 'my_filter_function', 10, 3 );kcv_postmeta_postType_sectionIDadd_filter( 'kcv_postmeta_post_mySectionID', 'my_filter_function', 10, 3 );kcv_postmeta_postType_sectionID_fieldIDadd_filter( 'kcv_postmeta_post_mySectionID_fieldID', 'my_filter_function', 10, 3 );The filters used for validating term meta values are very similiar with custom fields' filters. The only difference is that you'd use taxonomy name instead of post type name. Also the filters are prefixed with kcv_termmeta_ instead of kcv_postmeta_. Here are the filters used:
And here are the filters:
kcv_termmeta_taxonomyadd_filter( 'kcv_termmeta_category', 'my_filter_function', 10, 3 );kcv_termmeta_taxonomy_fieldTypeadd_filter( 'kcv_termmeta_category_textarea', 'my_filter_function', 10, 3 );kcv_termmeta_taxonomy_sectionIDadd_filter( 'kcv_termmeta_category_mySectionID', 'my_filter_function', 10, 3 );kcv_termmeta_taxonomy_sectionID_fieldIDadd_filter( 'kcv_termmeta_category_mySectionID_fieldID', 'my_filter_function', 10, 3 );Validation/sanitation filters for user meta are very similiar with post and term meta. However, with user meta, you'll get fewer filters:
kcv_usermetaadd_filter( 'kcv_usermeta', 'my_filter_function', 10, 3 );kcv_usermeta_fieldTypeadd_filter( 'kcv_usermeta_textarea', 'my_filter_function', 10, 3 );kcv_usermeta_sectionIDadd_filter( 'kcv_usermeta_mySectionID', 'my_filter_function', 10, 3 );kcv_usermeta_sectionID_fieldIDadd_filter( 'kcv_usermeta_mySectionID_fieldID', 'my_filter_function', 10, 3 );Since version 2.6, KC Settings comes with options helpers to make your life easier ;)
There are a few variables you can use to pass as field options:
kcSettings_options::$nav_menuskcSettings_options::$image_sizeskcSettings_options::$image_sizes_defaultkcSettings_options::$image_sizes_customkcSettings_options::$post_types (public post types)kcSettings_options::$post_types_allkcSettings_options::$taxonomies (public taxonomies)kcSettings_options::$taxonomies_allkcSettings_options::$post_statuseskcSettings_options::$roleskcSettings_options::$yesnoIf you think you found a bug, need some features added, have questions or just want to say hi, please feel free to contact me.