Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Settings API e Options API di WordPress a confronto

Settings API e Options API come soluzioni differenti per strutturare menù nel Pannello di Amministrazione di WordPress.
Settings API e Options API come soluzioni differenti per strutturare menù nel Pannello di Amministrazione di WordPress.
Link copiato negli appunti

La Settings API fornisce una serie di funzioni specifiche per generare il markup necessario a creare, modificare e visualizzare le impostazioni di temi e plugin. Come descritto nella seconda parte di questo articolo, la funzione do_settings_sections() stampa a video tutti i gruppi di opzioni associati ad una determinata pagina. Il markup si presenta con la struttura che segue:

<h3>{Section title}</h3>
<p>{Sections callback output}</p>
<table class="form-table">
	<tbody>
		<tr>
			<th scope="row">{Settings field title}</th>
			<td>{Settings field callback output}</td>
		</tr>
		...
	</tbody>
</table>

Potrebbe però rivelarsi necessaria la creazione di una pagina di impostazioni più complessa, composta ad esempio da un gruppo di pulsanti radio, o da campi che vengono attivati o disattivati dinamicamente. In questi casi diventa necessario creare una struttura HTML personalizzata e può tornare utile ricorrere alla più flessibile Options API.

All'interno della funzione seventyone_register_settings() si andrà a registrare una nuova opzione:

function seventyone_register_settings(){
	...
	add_option(
		'seventyone_header',
		'image'
	);
	register_setting(
		'seventyone_header',
		'seventyone_header'
	);
}
add_action( 'admin_init', 'seventyone_register_settings' );

La funzione add_option() register_setting() do_settings_sections()

Creazione di uno o più sotto-menu

Un menu di primo livello offre una visibilità specifica nel pannello di amministrazione. Se, poi, i parametri da impostare sono numerosi, allora si dovrà valutare la possibilità di strutturare il menu in più pagine.

Ogni pagina ospiterà uno o più gruppi di opzioni, le quali, ovviamente, dovranno essere raggruppate secondo una logica comprensibile dall'amministratore del sito. La funzione fornita da WordPress per la creazione di sottomenu è add_submenu_page; essa accetta i seguenti argomenti:

Argomento Descrizione
$parent_slug (string
$page_title (string
$menu_title (string
$capability (string
$menu_slug (string
$function (string

Dunque, per integrare un sotto-menu al pannello di amministrazione, bisognerà aggiungere nella funzione seventyone_add_menus()

add_action( 'admin_menu', 'seventyone_add_menus' );
function seventyone_add_menus(){
	add_menu_page(
		__('Seventyone settings', 'seventyone'),	// Page title
		'Seventyone',					// Menu title
		'edit_theme_options',				// Capability
		'seventyone_menu',				// Menu slug
		'seventyone_menu_settings_page',		// Function that build the page content
		'',						// Icon URL
		61						// Menu position
	);
	add_submenu_page(
		'seventyone_menu', 				// Parent slug
		__('Seventyone header', 'seventyone'),		// Page title
		__('Header', 'seventyone'),			// Menu title
		'edit_theme_options', 				// Capability
		'seventyone_header_menu',			// Menu slug
		'seventyone_header_settings_page'		// callback
	);
}

seventyone_header_settings_page()

function seventyone_header_settings_page(){
	?>
	<div class="wrap">
		<h2><?php echo wp_get_theme(); ?> <?php _e('Header options', 'seventyone' ) ?></h2>
		<?php settings_errors(); ?>
		<form method="post" action="options.php">
		<?php
			settings_fields( 'seventyone_header' );
			// do_settings_sections( 'seventyone_header_menu' );
			?>
			<table class="form-table">
				<tr>
					<th scope="row"><?php _e('Header configuration', 'seventyone') ?></th>
					<td>
						<legend class="screen-reader-text">
							<span><?php _e('Header configuration', 'seventyone') ?></span>
						</legend>
						<label title="<?php _e('Slideshow', 'seventyone') ?>">
							<input type="radio" id="header_slideshow" name="seventyone_header" value="slideshow" <?php checked( 'slideshow', get_option('seventyone_header') ); ?> />
							<span><?php _e('Slideshow', 'seventyone') ?></span>
						</label>
						<br />
						<label title="<?php _e('Image', 'seventyone') ?>">
							<input type="radio" id="header_image" name="seventyone_header" value="image" <?php checked( 'image', get_option('seventyone_header') ); ?> />
							<span><?php _e('Image', 'seventyone') ?></span>
						</label>
					</td>
				</tr>
			</table>
			<?php
			submit_button();
		?>
	</form>
	</div><!-- .wrap -->
	<?php
}

In questo codice è stato commentato il richiamo della funzione do_settings_sections

Quest'ultima viene assegnata alla classe form-table tr _e() legend

si riesamini ora il codice che genera il primo pulsante:

<input type="radio" id="header_slideshow" name="seventyone_header" value="slideshow" <?php checked( 'slideshow', get_option('seventyone_header') ); ?> />

I radio buttons dispongono degli attributi type id name value checked checked checked

La funzione accetta, quindi, due argomenti: il primo è il valore da testare, il secondo è il valore dell'opzione presente nella tabella wp_options value slideshow image

Figura 4. L'immagine mostra il menu di amministrazione del tema e i due pulsanti radio in funzione
Il menu di amministrazione con due pulsanti radio

Nella parte conclusiva dell'articolo, si analizzerà un'efficiente alternativa alle pagine multiple: un sistema di opzioni a schede.

Ti consigliamo anche