Capitolo 9 Salvataggio più opzioni

programmazione Plugin programmare wordpress

Andando a modificare il file, mioplugin-settings-fields.php già trattato nel capitolo 8, andremo ad aggiungere svariati campi di setaggio con la funzione add_setting_field e le relative funzioni dei relativi callback.

<?php

function mioplugin_settings() {

  // If plugin settings don't exist, then create them
  if( false == get_option( 'mioplugin_settings' ) ) {
      add_option( 'mioplugin_settings' );
  }

  // Define (at least) one section for our fields
  add_settings_section(
    // Unique identifier for the section
    'mioplugin_settings_section',
    // Section Title
    __( 'Plugin Settings Section', 'mio-plug-in' ),
    // Callback for an optional description
    'mioplugin_settings_section_callback',
    // Admin page to add section to
    'mioplugin'
  );

  // Input Text Field
  add_settings_field(
    // Unique identifier for field
    'mioplugin_settings_input_text',
    // Field Title
    __( 'Text Input', 'mioplugin'),
    // Callback for field markup
    'mioplugin_settings_text_input_callback',
    // Page to go on
    'mioplugin',
    // Section to go in
    'mioplugin_settings_section'
  );

  // Textarea Field
  add_settings_field(
    'mioplugin_settings_textarea',
    __( 'Text Area', 'mioplugin'),
    'mioplugin_settings_textarea_callback',
    'mioplugin',
    'mioplugin_settings_section'
  );

  // Checkbox Field
  add_settings_field(
    'mioplugin_settings_checkbox',
    __( 'Checkbox', 'mioplugin'),
    'mioplugin_settings_checkbox_callback',
    'mioplugin',
    'mioplugin_settings_section',
    [
      'label' => 'Checkbox Label'
    ]
  );

  // Radio Field
  add_settings_field(
    'mioplugin_settings_radio',
    __( 'Radio', 'mioplugin'),
    'mioplugin_settings_radio_callback',
    'mioplugin',
    'mioplugin_settings_section',
    [
      'option_one' => 'Radio 1',
      'option_two' => 'Radio 2'
    ]
  );

  // Dropdown
  add_settings_field(
    'mioplugin_settings_select',
    __( 'Select', 'mioplugin'),
    'mioplugin_settings_select_callback',
    'mioplugin',
    'mioplugin_settings_section',
    [
      'option_one' => 'Select Option 1',
      'option_two' => 'Select Option 2',
      'option_three' => 'Select Option 3'
    ]
  );


  register_setting(
    'mioplugin_settings',
    'mioplugin_settings'
  );

}
add_action( 'admin_init', 'mioplugin_settings' );

function mioplugin_settings_section_callback() {

  esc_html_e( 'Plugin settings section description', 'mio-plug-in' );

}

function mioplugin_settings_text_input_callback() {

  $options = get_option( 'mioplugin_settings' );

	$text_input = '';
	if( isset( $options[ 'text_input' ] ) ) {
		$text_input = esc_html( $options['text_input'] );
	}

  echo '<input type="text" id="mioplugin_customtext" name="mioplugin_settings[text_input]" value="' . $text_input . '" />';

}

function mioplugin_settings_textarea_callback() {

  $options = get_option( 'mioplugin_settings' );

	$textarea = '';
	if( isset( $options[ 'textarea' ] ) ) {
		$textarea = esc_html( $options['textarea'] );
	}

  echo '<textarea id="mioplugin_settings_textarea" name="mioplugin_settings[textarea]" rows="5" cols="50">' . $textarea . '</textarea>';

}

function mioplugin_settings_checkbox_callback( $args ) {

  $options = get_option( 'mioplugin_settings' );

  $checkbox = '';
	if( isset( $options[ 'checkbox' ] ) ) {
		$checkbox = esc_html( $options['checkbox'] );
	}

	$html = '<input type="checkbox" id="mioplugin_settings_checkbox" name="mioplugin_settings[checkbox]" value="1"' . checked( 1, $checkbox, false ) . '/>';
	$html .= '&nbsp;';
	$html .= '<label for="mioplugin_settings_checkbox">' . $args['label'] . '</label>';

	echo $html;

}

function mioplugin_settings_radio_callback( $args ) {

  $options = get_option( 'mioplugin_settings' );

  $radio = '';
	if( isset( $options[ 'radio' ] ) ) {
		$radio = esc_html( $options['radio'] );
	}

	$html = '<input type="radio" id="mioplugin_settings_radio_one" name="mioplugin_settings[radio]" value="1"' . checked( 1, $radio, false ) . '/>';
	$html .= ' <label for="mioplugin_settings_radio_one">'. $args['option_one'] .'</label> &nbsp;';
	$html .= '<input type="radio" id="mioplugin_settings_radio_two" name="mioplugin_settings[radio]" value="2"' . checked( 2, $radio, false ) . '/>';
	$html .= ' <label for="mioplugin_settings_radio_two">'. $args['option_two'] .'</label>';

	echo $html;

}

function mioplugin_settings_select_callback( $args ) {

  $options = get_option( 'mioplugin_settings' );

  $select = '';
	if( isset( $options[ 'select' ] ) ) {
		$select = esc_html( $options['select'] );
	}

  $html = '<select id="mioplugin_settings_options" name="mioplugin_settings[select]">';

	$html .= '<option value="option_one"' . selected( $select, 'option_one', false) . '>' . $args['option_one'] . '</option>';
	$html .= '<option value="option_two"' . selected( $select, 'option_two', false) . '>' . $args['option_two'] . '</option>';
	$html .= '<option value="option_three"' . selected( $select, 'option_three', false) . '>' . $args['option_three'] . '</option>';

	$html .= '</select>';

	echo $html;

}

analizziamo i vari callback

mioplugin_settings_text_input_callback()

Ottengo l’array con le opzioni, con il comando get_option e la memorizzo in una variabile $options, viene controllato se nella chiave ‘text_input‘ ci sia un valore, nel caso la memorizziamo nella variabile $text_input tramite un escape esc_html. infine costruiamo il campo assegnando il nome mioplugin_settings[text_input]. (text_input sarà il nome della chiave per recuperare il valore)

mioplugin_settings_textarea_callback()

Stessa cosa per la text_input a differenza della chiave mioplugin_settings[textarea]

mioplugin_settings_checkbox_callback( $args )

Nella funzione per la checkbox dobbiamo passare degli argomenti $arg, che saranno gli argomeni passati nel comando add_setting_field in questo caso: [ ‘label’ => ‘Checkbox Label’ ].
Memorizziamo l’array in $options, controlleremo se nell’array con chiave checkbox (nome del controllo) avrà dei valori, nel caso lo salveremo in una variabile.
Costruiremo la nostra checkbox applicando il comando di wordpress checked per controllare se il comando è stato spuntato o no e imposteremo la label con l’argomento passato $args[‘label’], indicando l’attributo for della label con lo stesso attributo id del tag input

mioplugin_settings_radio_callback( $args )

Nella funzione per il controllo radio dobbiamo passare degli argomenti $arg, che saranno gli argomanti passati nel comando add_setting_field in questo caso: [ ‘option_one’ => ‘Radio 1’, ‘option_two’ => ‘Radio 2’ ] .
Memorizziamo l’array in $options, controlleremo se nell’array con chiave radio (nome del controllo) avrà dei valori, nel caso lo salveremo in una variabile.
Costruiremo la nostra radio applicando il comando di wordpress checked per controllare se il comando è stato spuntato o no e imposteremo la label con l’argomento passato $args[‘option_one’] ad esempio, il valore di value deve essere univoco, indicando l’attributo for della label con lo stesso attributo id del tag input

mioplugin_settings_select_callback( $args )

Per generare un campo select si inseriscono tutte le opzioni tra i tag <select> .
Per recuperare se un campo è selezionato, si usa il comando wordpress selected e <option>; per recuperare le varie opzioni si utilizza l’argomento $arg passato nella funzione e si recupera con la key data al valore dell’opzione, in questo caso per recuperare il primo valore $arg [‘option_one’].

SCRIVI UN COMMENTO