Dovresti avere familiarità con i campi personalizzati in WordPress. Li usiamo su un post o una pagina per aggiungere dati extra. Anche gli allegati WordPress vengono salvati come post, quindi sono disponibili anche campi personalizzati.
Oggi vedremo come aggiungere alcuni campi personalizzati in modo che gli allegati possano contenere più informazioni rispetto ai soli dati predefiniti.
Prima di tutto, creeremo un plugin per gestire i campi personalizzati degli allegati. Otterrà una serie di opzioni, le infornerà in modo che diventino parte del modulo quando modifichiamo un allegato e le salviamo nel database.
Per questo, utilizzeremo due hook di WordPress:
attachment_fields_to_edit
per gestire il modulo di modificaattachment_fields_to_save
per salvare i campi personalizzatiPasserò rapidamente su questa parte in quanto non è lo scopo principale di questo tutorial.
Crea una nuova cartella nella directory dei plugin (wp-content / plugins / media-campi / per esempio) e metti un file (chiamato plugin.php) dentro. Mettiamo anche un file chiamato custom_media_fields.php che manterrà le nostre opzioni.
Questo è ciò che è tuo plugin.php il file dovrebbe apparire come all'inizio:
/ * Nome plugin: Wptuts + URI plugin per campi multimediali personalizzati: Descrizione: Crea campi personalizzati allegati Versione: 0.1 Autore: Guillaume Voisin Autore URI: http://wp.tutsplus.com/author/guillaumevoisin Licenza: GPL2 * / require_once (plugin_dir_path ( __FILE__). '/Custom_media_fields.php'); Classe Wptuts_Custom_Media_Fields private $ media_fields = array (); function __construct ($ fields) public function applyFilter ($ form_fields, $ post = null) function saveFields ($ post, $ attachment) $ cmf = new Wptuts_Custom_Media_Fields ($ attchments_options);
Questa è la base che popoleremo nelle seguenti sezioni. Per ora, definiamo il nostro set di opzioni.
Nell'altro file, aggiungiamo alcune opzioni per migliorare il modulo di modifica degli allegati. Considereremo, per questo tutorial, le opzioni per migliorare le immagini. Ad esempio, aggiungeremo campi di copyright, descrizione dell'autore, filigrana, classificazione e disposizione dell'immagine.
$ themename = "twentytwelve"; $ attchments_options = array ('image_copyright' => array ('label' => __ ('Immagine copyright', $ themename), 'input' => 'testo', 'aiuta' => __ ('Se la tua immagine è protetta da copyright, $ themename), 'application' => 'image', 'exclusions' => array ('audio', 'video'), 'required' => true, 'error_text' => __ ('Campo copyright richiesto ', $ themename)),' image_author_desc '=> array (' label '=> __ (' Descrizione dell'autore dell'immagine ', $ themename),' input '=>' textarea ',' application '=>' image ', 'exclusions' => array ('audio', 'video'),), 'image_watermark' => array ('label' => __ ('Filigrana immagine', $ themename), 'input' => 'checkbox', 'application' => 'image', 'exclusions' => array ('audio', 'video')), 'image_stars' => array ('label' => __ ('Image rating', $ themename), ' input '=>' radio ',' opzioni '=> array (' 0 '=> 0,' 1 '=> 1,' 2 '=> 2,' 3 '=> 3,' 4 '=> 4) , 'application' => 'image', 'exclusions' => array ('audio', 'video')), 'image_disposition' => array ('label' => __ ('Immagine di sposition ', $ themename),' input '=>' select ',' options '=> array (' portrait '=> __ (' portrtait ', $ themename),' landscape '=> __ (' landscape ', $ themename)), 'application' => 'image', 'exclusions' => array ('audio', 'video')));
È fondamentalmente un array associativo che contiene questi parametri:
etichetta
- il nome del campo che verrà visualizzatoingresso
- il tipo di input (ad esempio testo, seleziona, radio, ...)aiuta
- informazioni per aiutare l'utente a compilare il campoapplicazione
- quale tipo di mime di attage da applicareesclusioni
- quale tipo di mime di attage da escluderenecessario
- è il campo richiesto? (predefinito falso
)error_text
- campo facoltativo per descrivere l'errore (se richiesto è impostato su vero
)opzioni
- campo opzionale per radio e selezionare i tipishow_in_modal
- se mostrare il campo in modale o no (predefinito vero
)show_in_edit
- se mostrare il campo nella visualizzazione di modifica classica o no (predefinito vero
)extra_rows
- righe aggiuntive per visualizzare il contenuto (all'interno dello stesso "TR
"tag")TR
- righe aggiuntive ("TR
"tag")Le opzioni illuminate rappresentano le opzioni che tratteremo manualmente mentre altre sono quelle predefinite che WordPress elaborerà automaticamente.
Dato che abbiamo a che fare con le immagini, impostiamo il applicazione
parametro su "Immagine
". In realtà si applica a tutti i tipi di immagini il cui tipo MIME inizia con"Immagine
" ad esempio image / jpeg
, image / png
e così via. Si potrebbe escludere il gif
tipo mime impostandolo nel campo delle esclusioni, ad esempio.
Ora le nostre opzioni sono impostate, scaviamo nei ganci.
Come menzionato in precedenza, ci occuperemo di due ganci.
Leghiamo le nostre due funzioni a quegli hook nel metodo del costruttore.
funzione __construct ($ fields) $ this-> media_fields = $ fields; add_filter ('attachment_fields_to_edit', array ($ this, 'applyFilter'), 11, 2); add_filter ('attachment_fields_to_save', array ($ this, 'saveFields'), 11, 2);
Ora vediamo questi ganci in dettaglio.
attachment_fields_to_edit
Ha due parametri:
$ form_field
- Una matrice di campi contenuti nel modulo di modifica degli allegati$ postale
- Oggetto che rappresenta l'allegato stessoUseremo il $ form_field
parametro per unire i nostri campi e controllarli singolarmente rispetto ai requisiti degli allegati (tipo mime per esempio).
funzione pubblica applyFilter ($ form_fields, $ post = null) // Se la matrice dei campi non è vuota se (! empty ($ this-> media_fields)) // Navigiamo nel set di opzioni foreach ($ this-> media_fields come $ campo => $ valori) // Se il campo corrisponde all'attuale allegato mime type // e non è una delle esclusioni if (preg_match ("/". $ values ['application']. "/", $ post-> post_mime_type) &&! in_array ($ post-> post_mime_type, $ values ['exclusions'])) // Otteniamo il valore meta del campo già salvato $ meta = get_post_meta ($ post-> ID, '_'. $ campo, vero); // Definire il tipo di input in 'testo' per impostazione predefinita $ values ['input'] = 'text'; // E impostalo sul campo prima di costruirlo $ values ['value'] = $ meta; // Aggiungiamo il nostro campo all'array $ form_fields $ form_fields [$ field] = $ values; // Restituiamo l'array $ form_fields completato return $ form_fields;
In questo passaggio, dovresti avere il modulo di modifica degli allegati ottimizzato con i nuovi campi che abbiamo aggiunto. Ma sembreranno input di testo. Ora dobbiamo considerare diversi tipi di input (radio, checkbox, ecc ...).
Quindi modifichiamo la nostra funzione per gestirlo. Sostituisci il $ values ['input'] = 'testo';
con il seguente codice:
switch ($ values ['input']) default: case 'text': $ values ['input'] = 'text'; rompere; caso 'textarea': $ values ['input'] = 'textarea'; rompere; case 'select': // Seleziona il tipo non esiste, quindi creeremo manualmente il codice html // Per questo, dobbiamo impostare il tipo di input su 'html' $ values ['input'] = 'html'; // Crea l'elemento select con il nome giusto (corrisponde a quello che wordpress crea per i campi personalizzati) $ html = ''; // Imposta il contenuto html $ values ['html'] = $ html; rompere; case 'checkbox': // Il tipo di checkbox non esiste né $ values ['input'] = 'html'; // Imposta la casella di spunta o meno se ($ meta == 'on') $ checked = 'checked = "checked"'; else $ checked = "; $ html = ''; $ values ['html'] = $ html; break; case 'radio': // il tipo di radio non esiste né $ values ['input'] = 'html'; $ html =" ; if (! empty ($ values ['options'])) $ i = 0; foreach ($ values ['options'] come $ k => $ v) if ($ meta == $ k) $ checked = 'checked = "checked"'; else $ checked = "; $ html. = '
'; $ I ++; $ values ['html'] = $ html; rompere;
Ora possiamo costruire elementi HTML comuni. Controlliamo il nostro modulo di modifica degli allegati. Dovrebbe assomigliare a questo:
I campi personalizzati, a seconda che tu abbia impostato le loro opzioni modali su true o no, appariranno anche nel modulo modale media quando modifichi un post.
Campi personalizzati in modalOra i nostri campi sono visualizzati nel nostro modulo di modifica degli allegati, dobbiamo salvarli nel database. Per questo, useremo il secondo gancio.
attachment_fields_to_save
Questo hook ha anche due parametri:
$ postale
- schieramento
che rappresenta l'entità di attaccamento$ attacco
- contiene tutti i campi allegati al post allegatoOra, riempiamo la funzione saveFields
abbiamo lasciato nella sezione precedente.
function saveFields ($ post, $ attachment) // Se il nostro array di campi non è vuoto se (! empty ($ this-> media_fields)) // Browser quei campi foreach ($ this-> media_fields come $ campo => $ valori) // Se questo campo è stato inviato (è presente nella variabile $ attachment) if (isset ($ attachment [$ field])) // Se il campo inviato è vuoto // Aggiungiamo errori all'oggetto post con il parametro "error_text" che impostiamo nelle opzioni if (strlen (trim ($ attachment [$ field])) == 0) $ post ['errors'] [$ field] ['errors'] [] = __ ($ values ['error_text']); // Altrimenti aggiorniamo il campo personalizzato else update_post_meta ($ post ['ID'], '_'. $ Campo, $ allegato [$ campo]); // Altrimenti, lo eliminiamo se già esisteva altrove delete_post_meta ($ post ['ID'], $ campo); return $ post;
Ok, ora i nostri campi personalizzati sono salvati nel database e saranno disponibili per il front-end.
oggetto
nel primo e un schieramento
nella seconda.update_post_meta
creerà il meta se non esiste._
"in modo che non vengano elencati nei metabox dei campi personalizzati nelle pagine di modifica.A partire dalla versione 3.5, sembra che gli errori non vengano ancora visualizzati nei moduli di modifica degli allegati. Ho provato a indagare il codice di base e, nonostante il fatto che avrebbe dovuto essere risolto (http://core.trac.wordpress.org/ticket/13810), non sembra.
Per il processo di salvataggio ajax, è certo che non è stato ancora fatto come menzionato nel ajax-actions.php
file:
$ errors = $ post ['errors']; // @todo restituiscimi e mostrami!
Quindi, al momento, gli errori non funzioneranno correttamente, ma il codice è fatto in modo che quando questi bug sono corretti, funzionerà.
Per utilizzare questi campi personalizzati nei tuoi modelli, devi solo recuperare i post metas come faresti per i post normali. Non dimenticare di aggiungere il "_
tasti "prefisso ai campi personalizzati".
Ad esempio, potresti fare così:
eco "
Ci sono diversi punti di miglioramento in base alle tue esigenze:
Non esitare a condividere con noi le tue idee su come migliorare questo plugin e cosa ti aspetti da tale funzionalità.