Iniziare ad usare la classe - GiorgioKM/MetaBoxesHandler GitHub Wiki
➡️ Impostare il nome del Custom Post Type
➡️ Trasformazioni sul Titolo del Post
➡️ Rimuovere codice HTML dal Titolo del Post
➡️ Supporto per l'immagine in evidenza
Una volta inclusa la classe nel progetto, occorre come prima cosa istanziarla con il seguente codice:
$mbh = new MetaBoxesHandler;
Se si vuole utilizzarla globalmente è anche possibile impostare la variabile direttamente come globale:
$GLOBALS['mbh'] = new MetaBoxesHandler;
❗ E' già previsto il supporto per il salvataggio dei dati. Non serve richiamare la funzione
add_action('save_post')
di wordpress.
La classe per lavorare bene ha bisogno di essere collegata ad un custom post type già registrato. Quindi è necessario prima registrarlo e successivamente richiamare il metodo setPostType($postType)
.
$mbh->setPostType('catalogue');
Permette di convertire il testo del titolo del post in maiuscolo, minuscolo, ecc. L'uso di questo metodo è facoltativo. Se non viene utilizzato, non verrà applicata nessuna trasformazione.
- capitalize: converte in maiuscolo il primo carattere di ogni parola
- uppercase: converte tutto in maiuscolo
- lowercase: converte tutto in minuscolo
- onlyfirst: converte solo il primo carattere in maiuscolo
$mbh->transformTextPostTitleAs('uppercase');
$mbh->transformTextPostTitleAs('lowercase');
Per rimuovere tutto il codice HTML inserito nel Titolo del Post, è sufficiente richiamare questo metodo:
$mbh->removeHTMLInPostTitle();
Dalla v0.15 è possibile aggiungere il supporto per l'immagine in evidenza (Wordpress Codex: Immagini in evidenza), senza che si apportino modifiche al file functions.php di wordpress.
- $arrLabels: Facoltativo. Array. E' formato da una lista di parametri, dove la chiave corrisponde all'etichetta da modificare e il valore è il testo da visualizzare
- $description: Facoltativo. String. E' la descrizione da visualizzare nel box dell'immagine in evidenza
$mbh->setFeatureSupport(
array(
'featured_image' => 'Immagine',
'set_featured_image' => 'Imposta Immagine',
'remove_featured_image' => 'Rimuovi Immagine',
'use_featured_image' => 'Usa Immagine',
),
'<p>Descrizione immagine in evidenza.</p>'
);
❗ Non serve richiamare la funzione
add_action('add_meta_boxes')
di wordpress.
Per aggiungere un metabox, si usa il metodo add($metaBoxName, $fields)
. Questo aggiungerà anche il form con i campi da compilare lato backend.
- $metaBoxName: Obbligatorio. String. E' l'etichetta che apparirà lato backend nella maschera del Metabox
- $fields: Obbligatorio. Array. Contiene una lista di opzioni e relativi parametri che occorrono per creare i postmeta
💡 E' possibile richiamare questo metodo più volte. Ad ogni chiamata verrà creato un metabox con tutti i campi del form.
$mbh->add('Generali', array(
array(
// Obbligatorio. Nome del postmeta per il salvataggio su DB. Utilizzarlo come array quando si configura l'opzione come campo html personalizzato
'name' => string|array,
// Obbligatorio. Nome dell'etichetta del campo
'label' => string,
// Obbligatorio (solo backend). Il tipo di campo da rendirizzare. Un valore tra (input|textarea|media-upload|wp-upload-image|select|custom-html|checkbox|radio)
'type' => string,
// Facoltativo (solo backend). Una serie di attributi HTML da aggiungere al campo ("chiave => valore")
// funziona solo con input e textarea
'type-attributes' => array,
// Facoltativo (solo backend). Inserire una breve descrizione del campo da visualizzare nel form
// non funziona con il tipo di campo custom-html
'help-description' => string,
// Facoltativo (default: none) (solo backend). Per la trasformazione del testo
// un valore tra (none|capitalize|uppercase|lowercase). Funziona solo con input
'text-transform' => string,
// Facoltativo (default: false). True: salverà il postmeta in un record separato dagli altri
'save-unique' => bool,
// Facoltativo (default: false). True: manterrà tutti i tag HTML nel contenuto del campo
'allow-html' => bool,
// Obbligatorio se il tipo di campo è custom-html. Funzione anonima da eseguire.
'custom-html' => closure,
// Obbligatorio se il tipo di campo è checkbox. Vedere di seguito per esempio.
'list-checkbox' => array,
// Obbligatorio se il tipo di campo è radio. Vedere di seguito per esempio.
'list-radio' => array,
// Facoltativo (default: false). Vedere di seguito per esempio.
'required' => bool|closure,
),
// Alcuni esempi:
array(
'name' => 'original_title',
'label' => 'Original Title',
'type' => 'input',
'type-attributes' => array(
'class' => array('large-text', 'ftext'),
),
'help-description' => __('<strong>Facoltativo.</strong> Inserire il titolo originale del catalogo.', 'admin'),
'text-transform' => 'capitalize',
),
array(
'name' => 'producer',
'label' => 'Produced By',
'type' => 'textarea',
'type-attributes' => array(
'rows' => 5,
'cols' => 80,
),
'help-description' => __('Inserire ogni voce separata da un ritorno a capo.', 'admin'),
'required' => true, // Aggiunta nella versione 0.14
),
array(
'name' => 'cast',
'label' => 'Cast',
'type' => 'textarea',
'type-attributes' => array(
'rows' => 10,
'cols' => 80,
),
'help-description' => __('Inserire ogni voce separata da un ritorno a capo.', 'admin'),
'save-unique' => true,
),
array(
'name' => 'image_preview_home',
'label' => 'Anteprima in Home',
'type' => 'wp-upload-image',
'image-support-size' => 'poster_orizontal', // Dalla funzione add_image_size('poster_orizontal', 1024, 577, true);
'help-description' => '<i>Visibile in Homepage.</i><br>Dimensioni minime: 1024x577 pixel',
),
array(
'name' => 'country',
'label' => 'Country',
'type' => 'select',
'select-options' => array( // Come option group
'Europe' => array(
'Italy' => 'italy',
'Spain' => 'spain',
),
'America' => array(
'Anguilla' => 'anguilla',
'Cile' => 'cile',
),
),
),
// Dalla v0.13 è possibile inserire più postmeta in una singola opzione.
// Questi verrano stampati a cascata nella 2° colonna della tabella. Esempio:
array(
'label' => '', // Obbligatorio. String. Nome dell'etichetta del campo. E' richiesto soltanto questo parametro!
'more-elements' => array(
// A seguire i parametri sono esattamente come una singola opzione
array(
'name' => 'trailer_url',
'label' => 'URL',
'type' => 'input',
'help-description' => 'Inserire l\'ID del video da Youtube o Vimeo.',
),
array(
'name' => 'trailer_container',
'label' => 'Container type',
'type' => 'select',
'select-options' => array(
'Youtube' => 'youtube',
'Vimeo' => 'vimeo',
),
'help-description' => 'Selezionare il contenitore da cui fa riferimento il video',
),
),
),
// Dalla v0.18 è possibile inserire un campo con codice html personalizzato.
array(
'name' => array(
'hd_notes',
'hd',
),
'label' => 'HD',
'type' => 'custom-html',
'custom-html' => function($fields, $values) {
return '
<input type="checkbox" name="'. $fields['hd'] .'" value="1"'. ($values['hd'] == '1' ? ' checked="checked"' : '') .'>
<input type="text" name="'. $fields['hd_notes'] .'" class="regular-text" placeholder="Notes" autocomplete="off" value="'. $values['hd_notes'] .'">
';
},
),
// Dalla v0.19 è possibile inserire una lista di campi checkbox.
array(
'name' => array(
'set_in_home_yes', // Nome del postmeta, che deve essere uguale alla chiave dell'array 'list-checkbox'
'set_in_home_no',
),
'label' => 'Show in homepage',
'type' => 'checkbox',
'list-checkbox' => array(
'set_in_home_yes' => array('Yes' => '1'), // Il valore di 'list-checkbox' è formato da un array chiave => valore. Il primo è l'etichetta e il secondo è il valore da salvare.
'set_in_home_no' => array('No' => '0'),
),
),
// Dalla v0.20 è possibile inserire una lista di campi radio.
array(
'name' => 'sex',
'label' => 'Sesso',
'type' => 'radio',
'list-radio' => array(
array('Maschio' => 'm'), // Il valore di 'list-radio' è formato da un array chiave => valore. Il primo è l'etichetta e il secondo è il valore da salvare.
array('Femmina' => 'f'),
),
),
// Data v0.21 è possibile chiamare una funzione anonima nel parametro 'required'.
// E' possibile così personalizzare a piacimento il messaggio di errore.
// '%s': ritorna l'etichetta del campo
array(
'name' => 'eta',
'label' => 'Età',
'type' => 'input',
'required' => function($postField) { // $postField: è il nome che ritorna dal metodo HTTP POST
if (!is_numeric($postField))
return 'Il campo <strong>%s</strong> deve essere un valore numerico!';
},
),
));
// Questo creerà un altro Metabox sotto quello istanziato di sopra.
$mbh->add('Altre info', array(
// Alcuni esempi:
array(
'name' => 'note',
'label' => 'Note',
'type' => 'texarea',
'type-attributes' => array(
'cols' => 30,
'rows' => 30,
),
'help-description' => 'Campo note',
),
));
Se si vogliono ottenere tutti i postmeta salvati (lato frontend), si può utilizzare il metodo returnAllMeta($includeAllPosts = false)
.
print_r($mbh->returnAllMeta());
Se viene stampato nella pagina in cui il tipo del post corrente è uguale al Custom Post Type impostato con il metodo setPostType()
, verrà mostrato il seguente risultato:
Array
(
[postmeta_1] => Array
(
[label] => Postmeta 1
[content] => Testo postmeta 1
)
[postmeta_2] => Array
(
[label] => Postmeta 2
[content] => Testo postmeta 2
)
[postmeta_3] => Array
(
[label] => Postmeta 3
[content] => Testo postmeta 3
)
)
print_r($mbh->returnAllMeta(true));
Altrimenti se la variabile globale $post
è nulla o è diversa dal Custom Post type impostato con il metodo setPostType()
oppure viene impostata a true la variabile $includeAllPosts
, verranno mostrati tutti i post associati al Custom Post type:
Array
(
[<post_id>] => Array
(
[postmeta_1] => Array
(
[label] => Postmeta 1
[content] => Testo postmeta 1
)
[postmeta_2] => Array
(
[label] => Postmeta 2
[content] => Testo postmeta 2
)
[postmeta_3] => Array
(
[label] => Postmeta 3
[content] => Testo postmeta 3
)
)
[<post_id>] => Array
(
[postmeta_1] => Array
(
[label] => Postmeta 1
[content] => Testo postmeta 1
)
[postmeta_2] => Array
(
[label] => Postmeta 2
[content] => Testo postmeta 2
)
[postmeta_3] => Array
(
[label] => Postmeta 3
[content] => Testo postmeta 3
)
)
)