camilosw
5/24/2018 - 12:25 AM

Settings

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
}