' . $section['desc'] . '
';
// Create the callback for description.
$callback = function () use ( $section ) {
echo str_replace( '"', '\"', $section['desc'] );
};
} elseif ( isset( $section['callback'] ) ) {
$callback = $section['callback'];
} else {
$callback = NULL;
}
/**
* Add a new section to a settings page.
*
* @param string $id
* @param string $title
* @param callable $callback
* @param string $page | Page is same as section ID.
*
* @since 2.0.0
*/
add_settings_section( $section['id'], $section['title'], $callback, $section['id'] );
} // foreach ended.
/**
* Register settings fields.
*
* Fields array is like this:
*
* $fields_array = array (
* $section => $field_array,
* $section => $field_array,
* $section => $field_array,
* );
*
*
* Field array is like this:
*
* $field_array = array (
* 'id' => 'id',
* 'name' => 'Name',
* 'type' => 'text',
* );
*
* @since 2.0.0
*/
foreach ( $this->fields_array as $section => $field_array ) {
foreach ( $field_array as $field ) {
// ID.
$id = isset( $field['id'] ) ? $field['id'] : FALSE;
// Type.
$type = isset( $field['type'] ) ? $field['type'] : 'text';
// Name.
$name = isset( $field['name'] ) ? $field['name'] : 'No Name Added';
// Label for.
$label_for = "{$section}[{$field['id']}]";
// Description.
$description = isset( $field['desc'] ) ? $field['desc'] : '';
// Size.
$size = isset( $field['size'] ) ? $field['size'] : NULL;
// Options.
$options = isset( $field['options'] ) ? $field['options'] : '';
// Standard default value.
$default = isset( $field['default'] ) ? $field['default'] : '';
// Standard default placeholder.
$placeholder = isset( $field['placeholder'] ) ? $field['placeholder'] : '';
// Sanitize Callback.
$sanitize_callback = isset( $field['sanitize_callback'] ) ? $field['sanitize_callback'] : '';
$args = [
'id' => $id,
'type' => $type,
'name' => $name,
'label_for' => $label_for,
'desc' => $description,
'section' => $section,
'size' => $size,
'options' => $options,
'std' => $default,
'placeholder' => $placeholder,
'sanitize_callback' => $sanitize_callback,
];
/**
* Add a new field to a section of a settings page.
*
* @param string $id
* @param string $title
* @param callable $callback
* @param string $page
* @param string $section = 'default'
* @param array $args = array()
*
* @since 2.0.0
*/
// @param string $id
$field_id = $section . '[' . $field['id'] . ']';
add_settings_field(
$field_id,
$name,
[ $this, 'callback_' . $type ],
$section,
$section,
$args
);
} // foreach ended.
} // foreach ended.
// Creates our settings in the fields table.
foreach ( $this->sections_array as $section ) {
/**
* Registers a setting and its sanitization callback.
*
* @param string $field_group | A settings group name.
* @param string $field_name | The name of an option to sanitize and save.
* @param callable $sanitize_callback = ''
*
* @since 2.0.0
*/
register_setting( $section['id'], $section['id'], [
$this,
'sanitize_fields',
] );
} // foreach ended.
} // admin_init() ended.
/**
* Sanitize callback for Settings API fields.
*
* @since 2.0.0
*/
public function sanitize_fields( $fields ) {
foreach ( $fields as $field_slug => $field_value ) {
$sanitize_callback = $this->get_sanitize_callback( $field_slug );
// If callback is set, call it.
if ( $sanitize_callback ) {
$fields[ $field_slug ] = call_user_func( $sanitize_callback, $field_value );
continue;
}
}
return $fields;
}
/**
* Get sanitization callback for given option slug
*
* @param string $slug option slug.
*
* @return mixed string | bool false
* @since 1.0.0
*/
function get_sanitize_callback( $slug = '' ) {
if ( empty( $slug ) ) {
return FALSE;
}
// Iterate over registered fields and see if we can find proper callback.
foreach ( $this->fields_array as $section => $field_array ) {
foreach ( $field_array as $field ) {
if ( $field['name'] != $slug ) {
continue;
}
// Return the callback name.
return isset( $field['sanitize_callback'] ) && is_callable( $field['sanitize_callback'] ) ? $field['sanitize_callback'] : FALSE;
}
}
return FALSE;
}
/**
* Get field description for display
*
* @param array $args settings field args
*/
public function get_field_description( $args ) {
if ( ! empty( $args['desc'] ) ) {
$desc = sprintf( '