Come evitare di reinventare la ruota dei Campi Personalizzati nel Metabox del mio Plugin?
Ecco lo scenario:
Nel mio plugin, voglio che appaia un metabox nell'editor di post/pagine.
Voglio che il metabox sia -esattamente- come quello dei 'Campi Personalizzati' di WordPress (Aggiungi altro, elimina, aggiorna, dropdown auto-popolato, Inserisci nuovo link, magia AJAX, ecc.); con un paio di piccole differenze:
Invece di solo 'Nome' e 'Valore', voglio 'Target', 'Nome' e 'Valore'
Invece di salvarli tutti come campi personalizzati 'pubblici' che appaiono automaticamente nel metabox WP dei Campi Personalizzati, voglio che siano memorizzati come un singolo array multidimensionale all'interno di un campo 'privato' con namespace... cioè,
_myplugin_custom_fields = array( 1 => array( 'target' => 'mytarget1', 'name' => 'myname1', 'value' => 'myvalue1' ), 2 => array( 'target' => 'mytarget2', 'name' => 'myname2', 'value' => 'myvalue2' ) )
Ho passato tutto il giorno a scavare attraverso l'intricata rete del Core di WP, e non sono riuscito a trovare un modo semplice per realizzare questo. Se procedo in base alla mia attuale comprensione, finirò per duplicare centinaia di righe di codice core da numerosi file php e js.
Qualcuno qui nella terra delle Risposte WordPress può aiutarmi a indicarmi la direzione giusta? Ho molta esperienza nell'aggiungere e sfruttare metabox in temi e plugin, ma questo mi ha completamente bloccato.
Per favore fatemi sapere se non sono stato chiaro.
Grazie in anticipo a tutti coloro che risponderanno!

La risposta breve è che non esiste un modo semplice per farlo, poiché la metabox dei campi personalizzati non è stata scritta pensando all'estensibilità.
Potresti aggiungere il campo aggiuntivo utilizzando JavaScript e dirottare il pulsante Aggiungi per inviare i dati al tuo gestore AJAX personalizzato che li memorizzerebbe come desideri.

Sto salvando i miei campi personalizzati con il nome _meta_qualcosa
. Iniziando il nome con un underscore, si impedisce a WordPress di mostrare i campi personalizzati nel menu a discesa nei post normali.
Per salvare in un array sto utilizzando un codice HTML come questo.
...
<input type="text" class="short" name="_events_meta[startDate]" id="_events_meta[startDate]" value="<?php if(!empty($meta['startDate'])) echo $meta['startDate']; ?>"/>
<input type="text" class="extrashort" name="_events_meta[startTime]" id="_events_meta[startTime]" value="<?php if(!empty($meta['startTime'])) echo $meta['startTime']; ?>"/>
...
Per recuperare i valori meta, questo è il codice che sto utilizzando
...
$meta = get_post_meta($post->ID,'_events_meta',TRUE);
...
Ora ho un array associativo $meta
dove il nome della chiave è dato tra parentesi nell'attributo id
dell'elemento input
.
Per il salvataggio sto utilizzando codice come questo
...
$new_data = $_POST['_events_meta'];
...
add_post_meta($post_id,'_events_meta',$new_data,TRUE);
...
Quindi viene salvato come un singolo record in wp_postsmeta
Spero che questo sia utile e chiaramente espresso dalla mia parte?

Grazie per l'input, ma non è esattamente quello che sto cercando. Sono familiare con come fare quella parte (come mostrato nel mio secondo punto elenco), ma la cosa principale che mi interessa qui è come sostanzialmente duplicare la Metabox dei Campi Personalizzati -E- aggiungere un 3° Campo (Target) -E-, dopo aver duplicato la Metabox dei Campi Personalizzati, inserire tutti i miei valori in un array. Penso che se riesco a capire come gestire il primo punto elenco, sarò in grado di determinare abbastanza facilmente come organizzare il mio array. Grazie ancora per aver dedicato del tempo a contribuire!

Sembra che stiamo lavorando su cose simili. Non sono sicuro se questo ti sarà utile, ma potrebbe darti altre idee.
Primo di tre post sul blog - http://www.deluxeblogtips.com/2010/05/howto-meta-box-wordpress.html
Spero ti sia utile!
