Iniziare ad usare la classe - GiorgioKM/MetaBoxesHandler GitHub Wiki

Sommario

➡️ Istanziare la classe

➡️ 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

➡️ Aggiungere un Metabox

➡️ Ottenere tutti i postmeta


Istanziare la classe

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;

Impostare il custom post type

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');

Trasformazioni sul Titolo del post

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.

I tipi validi da utilizzare sono:

  • 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

Esempio 1:

$mbh->transformTextPostTitleAs('uppercase');

Esempio 2:

$mbh->transformTextPostTitleAs('lowercase');

Rimuovere codice HTML dal Titolo del Post

Per rimuovere tutto il codice HTML inserito nel Titolo del Post, è sufficiente richiamare questo metodo:

$mbh->removeHTMLInPostTitle();

Supporto per l'immagine in evidenza

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.

Il metodo setFeatureSupport($arrLabels = array(), $description = false) accetta 2 parametri.

  • $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>'
);

Aggiungere un Metabox

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.

Il metodo add($metaBoxName, $fields) accetta 2 parametri.

  • $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',
	),
));

Ottenere tutti i postmeta

Se si vogliono ottenere tutti i postmeta salvati (lato frontend), si può utilizzare il metodo returnAllMeta($includeAllPosts = false).

Esempio 1

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
        )
    
)

Esempio 2

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
                )
        )
    
)
⚠️ **GitHub.com Fallback** ⚠️