Rendere i Campi Personalizzati Standard nell'Interfaccia di Amministrazione
Ho aggiunto diversi custom_post_types
alla mia installazione di WordPress 3. Ognuno è leggermente diverso dagli altri e dovrebbe memorizzare informazioni uniche nei custom_fields
. Mentre uno potrebbe memorizzare un product_id
, un altro no. Uno avrà un source_url
e un altro no. Invece di dover istruire i miei editori su quali campi personalizzati utilizzare con quali post personalizzati, come posso fare in modo che ogni post personalizzato includa i suoi campi personalizzati come parte dell'interfaccia utente stessa?
Se visiti "daily_cartoon" avresti una schermata che richiede solo un titolo, didascalia e media.
Se visiti "daily_product" avresti una schermata che richiede solo un titolo, prezzo, riassunto, ecc.

puoi aggiungere meta_boxes per memorizzare i dati dei campi personalizzati al loro interno. poiché add_meta_box può essere configurato in base al post_type, questo ti permetterà di aggiungere meta_box diverse a diversi tipi di post.
guarda questo articolo per un esempio completo di modifica della schermata di nuovo/modifica del tipo di post personalizzato.

Ciao @Jonathan Sampson:
Esistono diversi plugin per semplificare la creazione di Custom Post Types e alcuni permettono anche di definire Custom Fields, senza un ordine particolare:
Come ho già accennato, sto lavorando a un plugin che invece di fornire un'interfaccia utente come questi, offre un'API estensibile per tipi di campo complessi (e anche quelli semplici). Ma dopo aver passato un'ora a cercare di impacchettarlo, mi sono reso conto che non è ancora pronto per la distribuzione. Forse tra qualche settimana.
I plugin elencati sopra dovrebbero soddisfare le tue esigenze di base per ora, e cercherò di rendere il mio compatibile con i dati memorizzati da tutti questi nel caso in cui decidessi di utilizzare il mio in futuro.
Potresti anche trovare utile questo articolo:

Recentemente ho avuto bisogno di affrontare un problema molto simile mentre lavoravo all'interno di un tema. La base del codice proveniva da questo articolo e ho modificato parte del codice.
Di seguito la prima porzione del codice che ho modificato.
add_action('init', 'limited_post_type');
function my_custom_limited_post_type()
{
$labels = array(
'name' => _x('Tipo di Post Limitato', 'nome generale del tipo di post'),
'singular_name' => _x('Film - DVD', 'nome singolare del tipo di post')
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt', 'page-attributes','custom-fields' ),
'show_in_nav_menus' => true
);
register_post_type('limited_post_type', $args);
}
Di seguito la seconda porzione del codice che ho modificato.
foreach ( $scope as $scopeItem ) {
switch ( $scopeItem ) {
case "post": {
// Output su qualsiasi schermata di post
if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
$output = true;
break;}
case "page": {
// Output su qualsiasi schermata di pagina
if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
$output = true;
break;}
case "limited_post_type": {
// Output solo sul tipo di post limitato
if ((basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" && $post->post_type=="limited_post_type" ) || (basename( $_SERVER['SCRIPT_FILENAME'] )=="post.php" && $post->post_type=="film_dvd" ))
$output = true;
break;
}
Se vuoi, inviami un messaggio e sarò felice di inviarti il mio file functions.php come riferimento. Questo è sicuramente il modo per farlo funzionare, visto che ho passato molte notti a strapparmi i capelli proprio come te.
