Questo tipo di attività, cioè l’aggiunta di box con campi personalizzati nella scheda di inserimento o di modifica di una pagina o di un articolo, è richiesta molto spesso per mostrare un sottotitolo, un banner o qualsiasi altra infomazione che l’autore dell’articolo ha necessità di tenere separata dall’editor principale di WordPress.
Il codice seguente chiamerà una funzione di callback che mostrerà nell’editor un nuovo box contenente i campi:
add_action( 'add_meta_boxes', 'meta_box_CampiPersonalizzati' );
Quella che segue è la funzione di callback (cioè che viene richiamata) meta_box_CampiPersonalizzati(): che utilizza add_meta_box() per per configurare il box.
function meta_box_CampiPersonalizzati(){
add_meta_box(
'CampiPersonalizzati-meta-box-id', // ID dell'elemento HTML
'Campi Personalizzati', // Titolo visibile
'CampiPersonalizzati_callback', // Nome della funzione da chiamare per gestire il box
'page', // Il box sarà visibile in tutte le pagine "page"
'normal', // Dove lo visualizzi in pagina
'high' // Priorità
);
}
Anche questa funzione che imposta il box, ha una callback, ma questa serve a mostrare i campi nel box:
function CampiPersonalizzati_callback(){?>
<fieldset><?php
global $post;
$campo_personalizzato_1 = '';
$custom = get_post_custom( $post->ID );
if(isset($custom[ "campo_personalizzato_1" ]) && isset($custom[ "campo_personalizzato_1" ][ 0 ])){
$campo_personalizzato_1 = $custom[ "campo_personalizzato_1" ][ 0 ];
}
?>
<div for="_campo_personalizzato_1"><?php _e( 'Campo personalizzato' )?></div><?php
echo '<input placeholder="Campo personalizzato" type="text" name="campo_personalizzato_1" id="campo_personalizzato_1" value="'.$campo_personalizzato_1.'"/>';
?>
</fieldset>
<?php
}
L’effetto visibile nell’editor delle pagine di WordPress sarà più o meno questo:

Il valore eventualmente digitato in “Campo personalizzato” dovrà essere salvato da qualche parte nel database, e per questo abbiamo una funzione specifica.
add_action( 'save_post', '_save_post_meta_boxes' );
La callback in questo caso è _save_post_meta_boxes() dove viene ignorato l'autosave e va ad aggiornare il valore del post_meta ‘campo_personalizzato_1’ con quanto digitato manualmente nel campo e passato da WordPress nella $_POST.
function _save_post_meta_boxes(){
global $post;
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if(isset($post)){
if ( get_post_status( $post->ID ) === 'auto-draft' ) {
return;
}
}
if(isset($_POST[ "campo_personalizzato_1" ])){
update_post_meta( $post->ID, "campo_personalizzato_1", sanitize_text_field( $_POST[ "campo_personalizzato_1" ] ) );
}
