settings.php generalmente va en la carpeta admin
<?php
// https://codex.wordpress.org/Creating_Options_Pages
// https://codex.wordpress.org/Settings_API
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;
add_action( 'admin_menu', function() {
add_submenu_page(
'options-general.php',
'Configuración', // Título de la página (pestaña del navegador)
'Configuración', // Título de la página (menú)
'manage_options',
'nombre-plugin-settings',
'nombre_plugin_settings_page'
);
} );
// https://wordpress.stackexchange.com/questions/100023/settings-api-with-arrays-example
add_action( 'admin_init', function() {
$option_name = 'nombre_plugin_field_1';
$option_value = get_option( $option_name, '' );
register_setting( 'events_calendar_map', $option_name );
add_settings_section(
'section_name',
'Section title',
'nombre_plugin_section',
'nombre-plugin-settings'
);
add_settings_field(
'id-field',
'Field label',
'nombre_plugin_field',
'nombre-plugin-settings',
'section_name',
array(
'label_for' => 'label-for',
'name' => 'field_name',
'value' => $option_value
)
);
} );
function nombre_plugin_section() {
echo '<p>Texto de la sección</p>';
}
function nombre_plugin_field( $args ) {
$name = sprintf('%s[%s]', $args['option_name'], $args['name']);
?>
<input
type="text"
name="<?php echo $name; ?>"
id="<?php echo $args['label_for']; ?>"
value="<?php echo $args['value'] ?>"
>
<?php
}
function nombre_plugin_settings_page() {
?>
<div class="wrap">
<h1>Title</h1>
<form method="post" action="options.php">
<?php settings_fields( 'nombre_plugin' ); ?>
<?php do_settings_sections( 'nombre-plugin-settings' ); ?>
<?php submit_button(); ?>
</form>
</div>
<?php
}